PHP에서 정적 변수를 사용하는 방법에 대한 예제 요약

伊谢尔伦
풀어 주다: 2023-03-12 07:08:02
원래의
1473명이 탐색했습니다.

static 키워드는 클래스의 특정 인스턴스가 아닌 클래스와 관련된 속성 또는 메서드를 선언합니다. 따라서 이러한 유형의 속성 또는 메서드를 "클래스 속성" 또는 "클래스"라고도 합니다. 방법".

액세스 제어 권한이 허용되면 이 클래스의 객체를 생성하지 않고도 클래스 이름과 콜론 두 개 "::"를 사용하여 직접 호출할 수 있습니다.

static 키워드를 사용하여 변수와 메서드를 수정할 수 있습니다.

인스턴스화 없이 클래스의 정적 속성과 정적 메서드에 직접 액세스할 수 있습니다.

static의 속성 및 메서드는 정적 속성 및 메서드에만 액세스할 수 있으며 비static속성 및 메서드에는 액세스할 수 없습니다. 정적 속성과 메서드가 생성될 때 호출할 수 있는 이 클래스의 인스턴스가 아직 없을 수 있기 때문입니다.

정적 속성은 메모리에 단 하나의 복사본만 가지며 모든 인스턴스에서 공유됩니다.

현재 클래스의 정적 멤버에 액세스하려면 self:: 키워드를 사용하세요.
정적 속성 공개 기능

클래스의 모든 인스턴스는 클래스의 정적 속성을 공유합니다.

즉, 메모리에 인스턴스가 여러 개 있더라도 정적 속성의 복사본은 하나만 있습니다.

다음 예에서는 개인 및 정적 수정을 통해 카운터 $count 속성이 설정됩니다. 이러한 방식으로 외부 세계는 $count 속성에 직접 액세스할 수 없습니다. 프로그램 실행 결과, 여러 인스턴스가 동일한 정적 $count 속성을 사용하고 있음을 알 수 있습니다.

<?php
class user{
    private static $count = 0 ; //记录所有用户的登录情况.
    public function construct(){
        self::$count = self::$count + 1;
    }
    public function getCount(){    
        return self::$count;
    }
    public function destruct(){
        self::$count = self::$count -1;
    }
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo "now here have ".$user1->getCount()." user";
echo "<br>";
unset( $user3);
echo "now here have ".$user1->getCount()." user";
?>
로그인 후 복사

프로그램 실행 결과:
1
2

이제 여기에는 3명의 사용자가 있습니다
이제 여기에는 2명의 사용자가 있습니다. jb51.net
정적 속성이 직접 호출됩니다.

정적 속성은 인스턴스화 없이 직접 사용할 수 있으며 클래스는 아직 생성되지 않았습니다. 아직 생성되지 않았지만 직접 사용할 수 있습니다.

사용된 메소드는 클래스 이름::정적 속성 이름입니다.

<?php
class Math{
    public static $pi = 3.14;
}
//求一个半径3的园的面积。
$r = 3;
echo "半径是 $r 的面积是<br>";
echo Math::$pi * $r * $r ;
echo "<br><br>";
//这里我觉得 3.14 不够精确,我把它设置的更精确。
Math::$pi = 3.141592653589793;
echo "半径是 $r 的面积是<br>";
echo Math::$pi * $r * $r ;
?>
로그인 후 복사

프로그램 실행 결과:
1
2
3
4

반경이 3인 영역은
28.26
반경이 3인 영역은
28.2743338823

클래스가 생성되지 않으며 정적 속성은 직접 사용할 수 있습니다. 정적 속성은 언제 메모리에 생성되나요? PHP에서 관련 정보를 본 적이 없습니다. 설명을 위해 Java의 개념을 인용하는 것도 보편적이어야 합니다.

클래스가 호출될 때 생성되는 정적 속성 및 메서드. 클래스가 호출된다는 것은 클래스가 생성되거나 클래스의 정적 멤버가 호출된다는 의미입니다.
정적 메서드

정적 메서드는 클래스를 인스턴스화하지 않고 직접 사용할 수 있습니다.

사용된 메소드는 클래스 이름:: 정적 메소드 이름입니다.

수학적 계산을 수행하기 위해 이 수학 수업을 계속 작성해 보겠습니다. 우리는 최대값을 계산하는 방법을 설계합니다. 이는 수학적 연산이기 때문에 이 클래스를 인스턴스화할 필요가 없습니다. 이 방법을 사용하면 훨씬 더 편리할 것입니다.

우리는 단지 정적 메서드를 보여주기 위해 이 클래스를 설계했습니다. PHP는 숫자 값을 비교하는 max() 함수를 제공합니다.

<?php
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }    
}
$a = 99;
$b = 88;
echo "显示 $ a 和 $ b 中的最大值是";
echo "<br>";
echo Math::Max($a,$b);
echo "<br>";echo "<br>";echo "<br>";
$a = 99;
$b = 100;
echo "显示 $ a 和 $ b 中的最大值是";
echo "<br>";
echo Math::Max($a,$b);
?>
로그인 후 복사

프로그램 실행 결과:

$a와 $b의 최대값이
99임을 보여줍니다.
$a와 $b의 최대값이
100임을 보여줍니다.
정적 메소드로 정적 메소드를 호출하는 방법

먼저 예를 들어 정적 메서드가 다른 정적 메서드를 호출하는 경우 클래스 이름을 직접 사용합니다.

<?php
// 实现最大值比较的Math类。
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = Math::Max($num1,$num2);
       $num2 = Math::Max($num2,$num3);
       $num1 = Math::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>
로그인 후 복사

프로그램 실행 결과:
1
2

는 99 77 88 중 최대값이
99

임을 보여줍니다. 또한 self::를 사용하여 현재 클래스의 다른 정적 메서드를 호출할 수도 있습니다. (제안)

<?php
// 实现最大值比较的Math类。
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>
로그인 후 복사

프로그램 실행 결과:
1
2

99 77 88 중 최대값이
99
정적 메서드가 정적 속성을 호출함

클래스 이름::정적 속성 이름을 사용하여 정적 속성을 호출합니다. 수업 .

<?php
//
class Circle{
    public static $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * Circle::$pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
로그인 후 복사

프로그램 실행 결과:
1

반경이 3인 원의 면적은 28.26입니다.

이 클래스의 정적 속성을 호출하려면 self::를 사용하세요. (제안)

<?php
//
class Circle{
    public static $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * self::$pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
로그인 후 복사

프로그램 실행 결과:
1

반지름이 3인 원의 면적은 28.26입니다.
정적 메서드는 비정적 속성을 호출할 수 없습니다.

정적 메서드는 비정적 속성을 호출할 수 없습니다. 비정적 속성은 self::를 사용하여 호출할 수 없습니다.

<?php
//
class Circle{
    public $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * self::pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
로그인 후 복사

프로그램 실행 결과:
1

치명적인 오류: 7행의 E:PHPProjectstest.php에 정의되지 않은 클래스 상수 'pi'

비정적 속성 값을 얻기 위해 $this를 사용할 수도 없습니다.

<?php
//
class Circle{
    public $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * $this->pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
로그인 후 복사

프로그램 실행 결과:
1

치명적인 오류: 7행 E:PHPProjectstest.php의 object 컨텍스트에 없을 때 $this 사용
정적 메서드가 비정적 메서드 호출

PHP5에서는 사용할 수 없습니다. 정적 메서드에서 비정적 메서드를 호출하려면 $this 식별자를 사용합니다.

<?php
// 实现最大值比较的Math类。
class Math{   
    public function Max($num1,$num2){
        echo "bad<br>";       
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = $this->Max($num1,$num2);
       $num2 = $this->Max($num2,$num3);
       $num1 = $this->Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>
로그인 후 복사

프로그램 실행 결과:

99 77 188 중 최대값이 다음과 같이 표시됩니다.
치명적인 오류: 10행 E:test.php의 객체 컨텍스트에 없을 때 $this 사용

a 클래스는 self::가 호출되면 시스템이 자동으로 이 메서드를 정적 메서드로 변환합니다.

다음 코드가 실행되어 결과가 나왔습니다. Max 메서드는 시스템에 의해 정적 메서드로 변환되기 때문입니다.

<?php
// 实现最大值比较的Math类。
class Math{   
    public function Max($num1,$num2){      
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>
로그인 후 복사

程序运行结果:
1
2

显示 99 77 188 中的最大值是
188

下面的例子中,我们让静态方法Max3 用过self::调用了非静态方法Max,有让非静态方法Max通过$this 调用非静态属性 $pi 。

在运行是报出了错误,这个错误和前一个例子 3-1-9.php一样,这次倒是非静态方法Max报出了静态方法调用非静态属性的错误。

这倒是证明了一点,在这里我们定义的非静态方法 Max 被系统自动转换成静态方法了。

<?php
// 实现最大值比较的Math类。
class Math{
    public $pi = 3.14;
    public function Max($num1,$num2){
        echo self::$pi;  //这里的调用看来不应该有问题.
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>
로그인 후 복사

程序运行结果:
1
2

显示 99 77 188 中的最大值是
Fatal error: Access to undeclared static property: Math::$pi in E:PHPProjectstest.php on line 7

위 내용은 PHP에서 정적 변수를 사용하는 방법에 대한 예제 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!