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

  • 静态属性有两种,局部静态跟全局静态,局部静态是只在函数作用域内有用,外部引用时会报错,全局静态则在函数内外部都可以引用且改变值。静态属性只会初始化一次,然后就会存在一块固定的内存块里。
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 即非静态方法可以访问静态方法以及静态属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值