开启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 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
php 显示指定路径下的图片
Oct 29 PHP
简单的PHP留言本实例代码
May 09 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
php字符集转换
Jan 23 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 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
德生PL990的分析评价
2021/03/02 无线电
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
使用正则替换变量
2007/05/05 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
微信小程序版翻牌小游戏
2018/01/26 Javascript
webpack优化的深入理解
2018/12/10 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
详解Python中的文件操作
2016/08/28 Python
python字典快速保存于读取的方法
2018/03/23 Python
基于Python List的赋值方法
2018/06/23 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python实现两张图片的像素融合
2019/02/23 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python 带时区的日期格式化操作
2020/10/23 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
关于感恩的演讲稿400字
2014/08/26 职场文书
申报优秀教师材料
2014/12/16 职场文书
七年级上册生物的课件
2019/08/07 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
Python学习之时间包使用教程详解
2022/03/21 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL