探讨PHP中OO之静态关键字以及类常量的详解


Posted in PHP onJune 07, 2013

闲着没事随便找了点PHP的关于OO的点资料看看,访问控制修饰符,self,parent,const,static几个关键字,箭头操作符(书上也这么叫..即“->”),范围解析操作符(即双冒号“::”),不过觉得这个跟C#语言里的OO很多是一样的,很容易理解不过还是看看理清PHP里的OO思路还是应该的吧。
--------------------------------------------------------------------------------
声明静态的类的成员和方法,使它不需要一个类的实例.一个static成员的声明不能通过一个类对象的实例来访问(尽管一个静态方法可以)。
静态声明必须在可见性声明之后。为了兼容PHP 4,如果没有可见性被声明,那么成员和方法将被当作是已经声明为public。
由于静态方法可以调用非对象实例,伪变量$this不可以在声明为静态的方法中使用。
事实上static方法调用形式在编译时被确定。当使用必须要声明的类名时,方法是完全标识和无继承规则的应用。当使用必须要声明的类名时,这种方法就被完全确认,而且没有使用继承的规则。
如果self已经被声明,那么self就被当前所属的类所解释。也不适用与继承规则。静态属性不能通过箭头操作符->.访问非静态方法,这将产生一个E_STRICT 级的警告。

<?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."/n";
$foo = new Foo();
print $foo->staticValue()."/n";
print $foo->my_static."/n";// Undefined "Property" my_static 
// $foo::my_static is not possible
print Bar::$my_static."/n";
$bar = new Bar();
print $bar->fooStatic()."/n";
?>

//静态方法实例(Static method example) 
<?php
class Foo
{   public static function aStaticMethod() {    }
}
Foo::aStaticMethod();
?>

可以在每个基类中定义常量使它保持不变。在你不使用$符号去声明或使用它时,常量不同于普通变量。就象静态成员,常量值不能通过对象的实例来访问(而应使用$object::constant). 常量值必须是一个常量表达式,而不是一个变量,一个类的成员,一个数学表达式或函数调用的结果。
<?php
class MyClass
{   const constant = 'constant value';
    function showConstant() {   echo  self::constant."/n";   }
}
echo MyClass::constant."/n";
$class = new MyClass();
$class->showConstant();// echo $class::constant; is not allowed
?>

PHP 相关文章推荐
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
PHP答题类应用接口实例
Feb 09 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
PHP常用的小程序代码段
Nov 14 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
php对接java现实加签验签的实例
Nov 25 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
PHP5常用函数列表(分享)
Jun 07 #PHP
深入理解php的MySQL连接类
Jun 07 #PHP
PHP之生成GIF动画的实现方法
Jun 07 #PHP
深入HTTP响应状态码速查表的详解
Jun 07 #PHP
探讨如何把session存入数据库
Jun 07 #PHP
基于PHP对XML的操作详解
Jun 07 #PHP
关于初学PHP时的知识积累总结
Jun 07 #PHP
You might like
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
原生小程序封装跑马灯效果
2020/10/21 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
Python函数的周期性执行实现方法
2016/08/13 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
Python多进程原理与用法分析
2018/08/21 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
幼儿园家长会欢迎词
2014/01/09 职场文书
员工评语大全
2014/01/19 职场文书
专项法律服务方案
2014/06/11 职场文书
会计人员演讲稿
2014/09/11 职场文书
离婚协议书格式
2015/01/26 职场文书
Docker部署Mysql8的实现步骤
2022/07/07 Servers