开启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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
详细解读PHP中接口的应用
Aug 12 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
php 中的closure用法详解
Jun 12 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
PhpStorm本地断点调试的方法步骤
May 21 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 cache类代码(php数据缓存类)
2010/04/15 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
php进程间通讯实例分析
2016/07/11 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
js 幻灯片的实现
2011/12/06 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
Vue3.0数据响应式原理详解
2019/10/09 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python随机数分布random测试
2018/08/27 Python
wxPython实现整点报时
2019/11/18 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
J2EE面试题
2016/03/14 面试题
优秀应届毕业生自荐信
2013/11/16 职场文书
会议邀请书范文
2014/02/02 职场文书
合伙经营协议书范本
2014/04/18 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL