探讨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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
把PHP安装为Apache DSO
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
PHP小教程之实现链表
Jun 09 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Laravel模糊查询区分大小写的实例
Sep 29 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 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 分页原理分析,大家可以看看
2009/12/21 PHP
php时间戳转换的示例
2014/03/31 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
微信小程序 聊天室简单实现
2017/04/19 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
python中的插入排序的简单用法
2021/01/19 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
TCP/IP的分层模型
2013/10/27 面试题
中层干部岗位职责
2013/12/18 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
学校捐款活动总结
2015/05/09 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS