① php中怎么调用方法中的静态变量
static
变量是php中的变量作用范围的一个重要特性
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果
一个普通的变量,如
$message
在它所在的函数执行完之后就被释放了
即第二个function执行10次,每次执行完后,$message变量被释放,所以每次都是1
变量前加了static后,该变量在它所在的函数执行完后不会被释放
即第一个function每次被执行后,static
$message没有被释放,它将被继续累加
② php静态属性跟常量有什么区别啊
类的静态属性. 会在类文件加载的时候, 就初始化.
属性值是可以更改的.
常量...一旦定义了. 就无法变更值..
这应该算是最大区别.
另外, 常量只能是简单的数据类型(如: int , string , boolean,float , double) ,
类的静态属性, 可以是php所支持的任意变量类型(但初始化的时候. 只能是简单数据类型, 数组)
③ php中静态成员如何使用
当前类中使用self::或者static::调用静态成员,静态方法中只能调用静态成员,外部直接使用类名::静态成员调用
④ php 静态方法为什么不能调用this
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”。
2. 静态变量的调用方法:只能使用slef:: 或者 类名:: 访问,不能使用$this访问;反之,类的成员变量未声明为const及static时,只能使用$this访问,不能用::访问。
⑤ php 中设置静态属性的意义是什么
静态和公共、受保护、私有这3种属性格式没有关系, 他们并不是并列的
公共、受保护、私有同样可以设置为静态
如:
publicstatic$a;
privatestatic$b;
静态属性的基本作用, 就是与普通的属性不同的是, 静态属性会记住之前的值, 举例说明:
functiona(){
$a=1;
$a+=1;
echo$a;
}
//然后连续3次调用这个函数测试下
a();
a();
a();
上面代码会输出 2 2 2
改成静态属性:
functiona(){
static$a=1;
$a+=1;
echo$a;
}
//然后连续3次调用这个函数测试下
a();
a();
a();
以上会输出 2 3 4
具体什么情况下会用到, 看程序开发的具体需求!
⑥ php父类如何调用子类的静态方法或变量
<?php
classA{
staticpublic$m=1;
staticpublicfunctionm(){
echostatic::$m,'<br/>';
}
staticpublicfunctionn(){
static::n();
}
}
classBextendsA{
staticpublic$m=111;
staticpublicfunctionm(){
parent::m();
}
staticpublicfunctionn(){
echoparent::$m,'<br/>';
}
}
B::m();
B::n();
⑦ php中,静态方法下,没什么不能用this调用动态属性
因为 静态的的方法和 类的属性不是存在一个内存空间.
类需要实例出一个对象才能使用它的属性.而类的静态方法就不要实例就能使用.所以他们存在内存的空间是不一样的.
⑧ PHP中,怎么在成员函数当中调用自己的成员属性除了静态调用之外还有别的方法吗
和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。
如 Box∷volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 静态成员函数的作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。
由此决定了静态成员函数不能访问本类中的非静态成员。 在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句: cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法 cout<<width<<endl; //若width是非静态数据成员,不合法。但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout<<a.width<<endl; //引用本类对象a中的非静态成员