TypechoJoeTheme

Dcr163的博客

统计

PHP面向对象中类常量,魔术常量,与延期绑定笔

2015-10-18
/
0 评论
/
925 阅读
/
正在检测是否收录...
10/18

/*
普通常量   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()方法

朗读
赞(0)
版权属于:

Dcr163的博客

本文链接:

http://dcr163.cn/37.html(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. slot mpo terbaru
    2025-02-08
  2. Sherry Stockdill
    2025-01-28
  3. slot demo
    2025-01-13
  4. 陌天
    2025-01-09
  5. Kerrie Bostick
    2024-12-28

标签云