浅析PHP类中的静态方法以及静态属性

    xiaoxiao2021-03-26  21

    静态属性有两种,局部静态跟全局静态,局部静态是只在函数作用域内有用,外部引用时会报错,全局静态则在函数内外部都可以引用且改变值。静态属性只会初始化一次,然后就会存在一块固定的内存块里。 function test(){ static $var = 5; //static $var = 1+1;就会报错 $var++; echo $var . ' '; } test(); //6 test(); //7 test(); //8 echo $var; //报错:Notice: Undefined variable: var function static_global(){ global $glo; $glo++; echo $glo.'<br>'; } static_global(); //1 static_global(); //2 static_global(); //3 echo $glo . '<br>'; //3 关于静态方法与非静态方法之间调用的注意事项,下面举例说明: class Banji{ public static $nums = 0; public $name = ''; public function __construct($name){ $this->name = $name; self::$nums++; } public function nums(){ echo self::$nums; echo '<br>'; echo $this->name; echo '<br>'; } public static function test(){ echo self::$nums; echo '<br>'; } public static function test1(){ echo self::$nums; echo '<br>'; echo $this->name; echo '<br>'; } public static function test2(){ self::nums(); } public static function test3(){ $this->nums(); } public function test4(){ self::test(); } public static function test5(){ static $nums = -1; echo $nums; echo '<br>'; echo self::$nums; echo '<br>'; static $nums1 = -2; echo $nums1; echo '<br>'; } public function test6(){ echo self::$nums; echo '<br>'; echo $nums1; echo '<br>'; } } $student = new Banji('Susunma'); $student->nums(); //1 Susunma $student = new Banji('Susunma1'); $student->nums(); //2 Susunma1 $student = new Banji('Susunma2'); $student->nums(); //3 Susunma2 $student->test(); //3 $student->test5(); //-1 3 -2 即静态方法中即使声明了跟全局一样的局部静态变量,也只在局部有用,用self引用的那个始终是全局的那个静态变量 $student->test6(); //3 Undefined variable: nums1 $student->test1(); //Fatal error: Uncaught Error: Using $this when not in object context 即静态方法中不能调用非静态属性 Banji::test(); //3 Banji::test1(); //Fatal error: Uncaught Error: Using $this when not in object context $student->test2(); //Deprecated: Non-static method Banji::nums() should not be called statically 非静态方法中不能以静态方式调用 $student->test3(); //Fatal error: Uncaught Error: Using $this when not in object context 即静态方法中不能调用非静态方法 $student->test4(); //3 即非静态方法可以访问静态方法以及静态属性
    转载请注明原文地址: https://ju.6miu.com/read-661571.html

    最新回复(0)