探讨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世纪万年历
Dec 06 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
Jun 26 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
php生成curl命令行的方法
2015/12/14 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
python文件及目录操作代码汇总
2020/07/08 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
超市端午节活动方案
2014/01/23 职场文书
财务部绩效考核方案
2014/05/04 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
服务理念标语
2014/06/18 职场文书
节水口号标语
2014/06/19 职场文书
评职称个人总结
2015/03/05 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
python内置模块之上下文管理contextlib
2022/06/14 Python