开启PHP Static 关键字之旅模式


Posted in PHP onNovember 13, 2015

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

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

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

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

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

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

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

Example #1 静态成员代码示例

<?php
class 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 静态方法代码示例

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

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

静态变量

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

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

静态方法

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

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

PHP 相关文章推荐
PHP分页显示制作详细讲解
Oct 09 PHP
用PHP和ACCESS写聊天室(三)
Oct 09 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
php短域名转换为实际域名函数
Jan 17 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
php不用正则验证真假身份证
Nov 06 PHP
php生成html文件方法总结
Dec 01 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
php正则表达式学习笔记
Nov 13 #PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
PHP基于yii框架实现生成ICO图标
Nov 13 #PHP
php中session定期自动清理的方法
Nov 12 #PHP
详解php设置session(过期、失效、有效期)
Nov 12 #PHP
php表单提交实例讲解
Nov 12 #PHP
You might like
一棵php的类树(支持无限分类)
2006/10/09 PHP
php长字符串定义方法
2012/07/12 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
儿童python练习实例
2018/05/27 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
如何基于python实现不邻接植花
2020/05/01 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
小学生作文评语
2014/04/18 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
市级三好学生评语
2014/12/29 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
办公室个人总结
2015/02/28 职场文书
采购员岗位职责范本
2015/04/07 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis