1. 云栖社区>
  2. PHP教程>
  3. 正文

开启PHP Static 关键字之旅模式

作者:用户 来源:互联网 时间:2017-12-01 14:55:44

关键字模式

开启PHP Static 关键字之旅模式 - 摘要: 本文讲的是开启PHP Static 关键字之旅模式, 声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public。由于静态方法不需要通过对象即可调用,所以伪变量$th


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

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

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

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

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

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

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

Example #1 静态成员代码示例

<?phpclass Foo{  public static $my_static = 'foo';  public function staticValue() {    return self::$my_static;  }}class Bar extends Foo{  public function fooStatic() {    return parent::$my_static;  }}print Foo::$my_static . " ";$foo = new Foo();print $foo->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() . " ";?>


Example #2 静态方法代码示例

<?phpclass Foo {  public static function aStaticMethod() {    // ...  }}Foo::aStaticMethod();$classname = 'Foo';$classname::aStaticMethod(); // As of PHP 5.3.0?>


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

静态变量

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

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

静态方法

静态方法和非静态方法之间有一个重要的区别:在调用静态方法时,不再需要拥有类的实例。

静态方法和非静态方法使用原则:一是如果某个方法中不包含$this变量,就应该时静态方法;如果不需要类的实例,可能还应该使用静态类,这样可以免去实例化类的工作。另,在静态方法中时不能使用$this变量的,因为静态方法不属于某个特定的实例。开启PHP Static 关键字之旅模式

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索关键字 , 模式 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备