PHP面向对象中类常量,魔术常量,与延期绑定笔
/*
普通常量 define('常量名', '常量值')
以前说过:define 定义的常量,全局有效,无论是页面内,函数内,类内,都可以访问
能否在定义 专门在类内发挥作用的常量?
专门在类内发挥作用 说明:
1:作用域在类内,类似与静态属性
2:有事常量,则不可改
其实就是“不可改变的静态属性”
类常量在类内用 const声明即可,前面不用加修饰符,而且权限是public,类内类外都可访问;
*/
define('AAA', 'Xiaojun');
class Human {
const NAME='Cen';
public static $age=19;
public static function show() {
echo AAA,'<br />';
echo self::NAME,'<br />';
echo self::$age,'<br />';
}
}
Human::show();
echo Human::NAME,'<br />';
echo '<hr />';
/* 魔术常量
1:无法手动修改的值,所以叫常量
2:但是值又是随环境变动的,所以叫魔术
__FILE__返回但前文件的路径
在框架开发或者是网站初始化脚本中,用来计算网站的根目录
__LINE__放回当前的行号
在框架中,可以用来在debug时,记录错误信息
__CLASS__放回当前的类名
__METHOD__放回当前的方法名
*/
echo '现在运行的是',__FILE__,'下的文件<br />';
echo '现在的代码是在第',__LINE__,'行<br />';
echo '当前文件在',__DIR__,'目录下<br />';
class Wman {
const AAA=111;
public function he() {
echo '现在这个方法的类是: ',__CLASS__;
echo '方法是:',__CLASS__,'类里的',__METHOD__,'方法<br />';
}
}
$a=new Wman();
$a->he();
echo '<hr />';
/*
延期绑定
*/
class PC {
public static function a() {
echo '来自父类得a()方法<br />';
}
public static function b() {
echo self::a(); //self 在这里是代表着父类,因为子类里没有a()方法,就找到了父类这里
}
public static function c() {
echo static::a(); //因为子类没有c方法,就调用了父类的c()方法
} //又因为是static 所以调用的是子类本身的a()方法;
}
class minipc extends PC {
public static function a() {
echo '来自子类的a()方法<br />';
}
}
minipc::b(); //来自父类的a()方法
minipc::c(); //来自子类的a()方法
Dcr163的博客
http://dcr163.cn/37.html(转载时请注明本文出处及文章链接)