开启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和ACCESS写聊天室(六)
Oct 09 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
PHP会员找回密码功能的简单实现
Sep 05 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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笔记之:文章中图片处理的使用
2013/04/26 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
ECMAScript6--解构
2017/03/30 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
简单了解Django模板的使用
2017/12/20 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
pandas apply多线程实现代码
2020/08/17 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
Wallis官网:英国女装零售商
2020/01/21 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
英语自我评价范文
2014/01/24 职场文书
消防安全员岗位职责
2014/03/10 职场文书
财务部总监岗位职责
2014/03/12 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
幼师求职信
2014/06/23 职场文书
工作证明格式及范本
2014/09/12 职场文书
征求意见函
2015/06/05 职场文书
催款函范文
2015/06/24 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS