探讨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字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
php中设置多级目录session的问题
Aug 08 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
php数组中包含中文的排序方法
Jun 03 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
php简单获取复选框值的方法
May 11 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
laravel 出现command not found问题的解决方案
Oct 23 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
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
js资料prototype 属性
2007/03/13 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
森林防火工作方案
2014/02/14 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
入党介绍人考察意见
2015/06/01 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis