PHP 面向对象编制程序和设计形式 (2/5卡塔尔(قطر‎ - 静态变量、属性和办法及延期绑定

2020-02-07 23:42栏目:bob体育平台
TAG:

声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员。

PHP高级程序设计 学习笔记 2014.06.10

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

Static(静态)关键字用来定义静态方法和属性,static 也可用于定义静态变量以及后期静态绑定。

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

1、静态变量 static variable

静态属性不可以由对象通过->操作符来访问。

静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。也就是说,在下一次执行这个函数时,变量仍然会记得原来的值。要将某个变量定义为静态的,只需要在变量前加上static关键字即可。

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

function testing()
{
    static $a = 1;
    $a *= 2;
    echo $a."n";
}

testing();
testing();
testing();
testing();

/**
 *    2
 *    4
 *    8
 *    16
 *    [Finished in 0.1s]
*/

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

静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。

PHP5.3.0之后,我们可以用一个变量来动态调用类。但该变量的值不能为关键字self, parent 或static。

本例中 testing()函数在每次执行之后,都会在内部保存 $a 变量的值。在下一次 testing()函数被调用时,$a 的值就会恢复,然后 testing() 函数会将这个值乘以2,并打印。变量的初始默认值为1,这一赋值操作只会在变量第一次被初始化时发生。函数每次执行的过程中,这一操作不会被调用。

Example #1 静态成员代码示例

2、类中静态元素的使用

staticValue() . " ";print $foo->my_static . " "; // Undefined "Property" my_static print $foo::$my_static . " ";$classname = 'Foo';print $classname::$my_static . " "; // PHP 5.3.0之后可以动态调用print Bar::$my_static . " ";$bar = new Bar();print $bar->fooStatic() . " ";?>

在类中 static 关键字有两种主要的用法,一种是用来定义静态成员,另一种是用来定义静态方法。声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。静态属性不可以由对象通过 -> 操作符来访问。在类的内部我们可以使用作用域限定操作符来访问不同层次作用域的变量。

Example #2 静态方法代码示例

2.1、静态属性

关于static 中静态变量和静态方法的总结

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。可以把静态变量看成是属于整个类而不是属于类的某个实例。与一般的实例变量不同的是,静态属性只保留一个变量值,而这个变量值对所有的实例都有效,也就是说所有实例共享这一个属性。

静态变量

class MyObject
{
    public static $a = 0;
    function MyMethod()
    {
        self::$a += 2;
        echo self::$a . "n";
    }
}

$instance1 = new MyObject();
$instance1 -> MyMethod();

$instance2 = new MyObject();
$instance2 -> MyMethod();

/**
 *
 * 2
 * 4
 * [Finished in 0.1s]
 *
 */

静态变量是只存在于函数作用域的变量,不过,在函数执行完成后,这种变量的值不会丢失,也就是说,在下一次调用这个函数时,变量仍然会记得原来的值。要将某个变量定义为静态的,只需要在变量前加上 static 关键字即可。

$this 指标是类的当前实例,是一个到主叫对象的引用。

在类中,static关键字有两种主要用法,一是用来定义静态成员,一是用来定义静态方法。在类的内部,可以使用作用域限定符 来访问不同层次作用域的变量。

self:: 表示的是类本身,使用 self:: 作用域限定符时必须在操作符后面加上 $ 符号,在类之外的代码中不能使用这个操作符,而且它不能识别自己在继承树层次结构中的位置。在扩展类中使用 self:: 作用域时, self 可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法。

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:PHP 面向对象编制程序和设计形式 (2/5卡塔尔(قطر‎ - 静态变量、属性和办法及延期绑定