php函数内的static变量以及类static方法

来源:互联网 发布:linux alias 取消 编辑:程序博客网 时间:2024/05/16 05:21

A: 函数内的static变量
static静态变量的理解
静态变量 类型说明符是static。

静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执 行过程中始终存在,但是在它作用域之外不能使用。

另外,属于静态存储方式的量不一定就是静态变量。 例如:外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。

静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
如下示例:
function func1() {
static count=0;//,count
count++;//,,count累加1
echo $count . “
”;
}
/输出12345678910/
for(i=0;i < 10; $i ++){
func1 ();
}

echo “
”;
function func2() {
count=0;count ++;
echo $count . “
”;
}
/输出1111111111/
for(i=0;i < 10; $i ++){
func2 ();
}

B:静态方法
静态函数最大的好处就是类不经过实例化就可以直接实用.但它不能访问类的非静态成员变量和成员函数.

Class Person{
// 定义静态成员属性
public static country = “中国”;  
    // 定义静态成员方法  
    public static function myCountry() {  
        // 内部访问静态成员属性  
        echo “我是”.self::$country.”人 ”;  
    }  
}  
class Student extends Person {  
    function study() {  
        echo “我是”. parent::$country.”人 ”;  
    }  
}  
// 输出成员属性值  
echo Person::
country.”
”; // 输出:中国
p1=newPerson();//echop1->country; // 错误写法
// 访问静态成员方法
Person::myCountry(); // 输出:我是中国人
// 静态方法也可通过对象访问:
p1>myCountry();//echoStudent::country.”
”; // 输出:中国
t1=newStudent();t1->study(); // 输出:我是中国人

以下是个更简单的实例

class test
{
protected static test = ‘222’;  
  public static function test2()  
  {  
    echo self::
test;
}
}

echo test::test2();
静态函数可以直接test::test2();这样调用,而且静态函数可以直接访问类的静态变量.

0 0