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 중국어 웹사이트의 기타 관련 기사를 참조하세요!