php const , static 浅析
2016-03-11 10:52
537 查看
概要
了解const, static 在class中的基本使用了解const, static 的语义差别以及使用场景
php static 特有的 “后期静态绑定”
const, static 最佳实践
const
类中始终保持不变的值定义为常量 , 与其他语言语义一致;类外也能定义(更常用define);
定义和使用常量的时候不需要使用 $ 符号;
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用;
类中定义const不具备封装性 (无法使用public, private, protecte关键字)
const or define ?
define 具备全局性 (命名空间失效)
define 值可以为表达式 , 形如
define('E', 10 * 20 * 30);
基本使用
//类中定义 class Cls { const N = 'const_val'; } //调用方法1: 通过类名调用 echo Cls::N; //调用方法2: 通过类对象调用 $obj = new Cls(); echo $obj::N; //类外定义 const N = 3; echo N; const N = 1 * 2 * 3; // 不合法,不是数学运算结果
static
static 关键字来定义静态方法和属性。与其他语言语义一致具备不同的封装性(允许使用public, private, protected关键字)
基本使用
class Cls { // 定义,允许使用 public/protected/private 关键字 // 有$符号 public static $staticVar = "static_var"; // 只能通过::访问,注意$符号,缺少$符号会被认为是访问类常量 function func() { echo $this::$staticVar; /* 或者self::$staticVar; */ } } (new Cls)->func();
关于静态绑定 和 后期静态绑定
静态方法中无法使用$this伪变量, 使用 self::访问在继承中可能导致问题class Base { public static function func() { echo "Base func"; } public static function anotherFunc() { self::func(); } } class Derived extends Base { public static function func() { echo "Derived func "; } } Derived::anotherFunc(); // "Base func"
使用 self:: 表示对当前类的静态引用,取决于定义当前方法所在的类。然而我们预期是达到形如C++动态绑定的效果,如何解决?, php.net提供了几个解决方案:
1. 使用get_called_class() 动态确定当前类名
2. 使用static::访问静态方法
class Base { public static function func() { echo "Base func"; } public static function func1() { static::func(); } public static function func2() { $clsName = get_called_class(); $clsName::func(); } } class Derived extends Base { public static function func() { echo "Derived func "; } } Derived::func1(); // "Derived func" Derived::func2(); // "Derived func"
最佳实践
区分const, define, static的不同语义,方便根据具体场景使用, const 一般用于类常量(不可修改), define用于定义全局性质的常量, static 不用于定义对象级别的属性常量定义, 类常量使用const, 类外常量使用define, 命名规范: 大写+下划线分词
调用类静态方法 使用 static:: 访问
动态获取当前类名使用get_called_class()方法
相关文章推荐
- RHEL5.5配置SFTP-ONLY访问
- ftp下载在谷歌与火狐不同
- ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象?
- 基础级-PDO
- 解决matplotlib中文乱码问题
- mac 安装php开发环境
- PHP编程效率的20个要点
- Zend Studio 13 v13.0.0汉化中文版
- php array 数组及数组索引
- php 中curl获取用户文件的大小
- PHP批量去除BOM头内容信息代码
- php分享三十二:php调试工具
- php strpos返回字符串首次出现的位置
- PHP5的composer学习从入门到精通
- PHP 开发者该知道的 5 个 Composer 小技巧
- php curl模拟登陆
- PHP设计模式之:单例模式
- 在php7中使用thinkphp操作mysql数据库
- 2016/3/10 PHP环境搭建 LAMP WAMP
- ContentProvider初探