php.static声明静态变量

今天上网查了下php的static关键字,得到了一些理解,特地写出来以供大家参考指点。

一,static 声明变量用法。

1. 用static关键字声明的变量跟其他局部变量不同之处在于:static声明的变量在局部范围内只会初始化一次,当执行完局部操作之后到下次使用这个变量之前,最近一次的值都会被保留 ( 即使再次经过了初始化此变量的代码,其值也不会被重新初始化,还是会保留最近一次的值 )。

例如:

function test_static(){

static $sta = 2;
echo $sta++;
}
test_static();  //输出 2

test_static();  //输出 3

2.就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向另一个变量或函数返回值,也不能指向一个对象。

function test_static(){

static $sta = 2 + 1 ; // ( ! ) Parse error: syntax error, unexpected '+', expecting ',' or ';' 

    static $sta = int(2); // 错同上。
   echo $sta++;
}

3. 

声明类成员(属性)或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员( 静态属性不可以由对象通过->操作符来访问 ),但是可以访问静态方法。

为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public

由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。

class parentclass{
static $pname = 'xk';
static function lg(){
echo self::$pname;
}
}


class childclass extends parentclass{
static $cname = 'test';
static function lp(){

echo parent::lg();

}
}
$pc = new parentclass().'<br>';

//echo $pc->$pname; // 错误
echo $pc->lg();

echo childclass::lp();


另外,还有一些有关静态方法的总结如下:

1.static关键字可以用来修饰变量、方法(静态方法);

2.不经过实例化,在当前类中就可以直接使用  "类名::静态属性名/方法名"  或者 "self::静态属性名/方法名"(当前类中推荐后者,这样当类名改变的时候更方便,如果在其他类中调用,就需要是类名::方法名)去访问类中static的属性和方法。

3.在类中我们不能使用this关键来访问静态属性,因为静态属性在对象可能还没有实例化之前已经存在。

4.静态的属性和方法,只能访问静态的属性和方法,不能访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值