1 <?php
2 /*
3 普通常量 define('常量名',常量值)
4 在定义和使用常量时,不用加$符号
5 define定义的常量,全局有效
6 无论是页面内,函数内,类内都可以访问
7
8 专门在类内发挥作用的常量
9 这说明
10 1:作用域在类内,类似于静态属性
11 2:是常量,则不可改
12 其实就是"不可改变的静态属性"
13
14 类常量在类内用const声明即可,前面不用$
15 类常量必须是一个定值,不能是变量,类属性或函数返回值
16 前面不用加权限修饰符,而且权限是public的,即外部也可以访问
17 */
18 define('ACC','Deny');
19 class Human{
20 const HEAD = 1;
21 public static $leg = 3;
22 public static function show(){
23 echo ACC,'<br />';
24 echo self::HEAD,'<br />';
25 echo self::$leg,'<br />';
26 }
27 }
28 Human::show();
29 echo Human::HEAD,'<br />';
30
31 /***
32 魔术常量
33 1:无法手动修改他的值,叫常量
34 2:他的值随环境变动的,叫魔术
35 所以叫魔术常量
36
37 __FILE__ 返回当前文件的路径
38 在框架开发或者网站初始化脚本中,用来计算网站的路径
39
40 __LINE__返回当前的行号
41 在框架中,可以用来在debug时,记录错误信息
42
43 __CLASS__返回当前的类名
44
45 __METHOD__返回当前的方法名
46 ***/
47
48
49 echo '当前正在运行的是',__FILE__,'文件<br />';//当前文件的路径
50 echo '当前正在运行的是',__DIR__,'目录<br />';//当前目录
51 echo '当前正在运行的是',dirname(__FILE__),'目录<br />';//和__DIR__效果一样
52 echo 'hi,我正在第',__LINE__,'行<br />';
53 echo 'hi,我正在第',__LINE__,'行<br />';
54 echo 'hi,我正在第',__LINE__,'行<br />';
55 class foo{
56 public static function t(){
57 echo '你正在运行',__CLASS__,'类<br />';
58 echo '下的',__METHOD__,'方法<br />';
59 }
60 }
61 foo::t();
62
63 /***
64 后期绑定/延迟绑定
65 ***/
66 class Human{
67 public static function whoami(){
68 echo '来自父类的whoami在执行<br />';
69 }
70 public static function say(){//子类没有say()方法,找到了父类这里
71 //在这里的self指的是父类
72 self::whoami();
73 }
74 public static function say2(){//在子类也没有say2()方法,也找到了父类这里
75 static::whoami(); //在这里的static指的是子类,如果子类没有whoami,会往上找到父类继承过来的whoami
76 }
77 }
78 class Stu extends Human{
79 public static function whoami(){
80 echo '来自子类的whoami在执行<br />';
81 }
82 }
83 Stu::say();
84 Stu::say2();
85
/***延迟绑定:
是指类的计算self的定义不是以定义时为准,而是以运行时的计算结果为准
***/
class Animal {
const age = 1;
public static $leg = 4;
public static function cry() {
echo '呜呜<br />';
}
public static function t1() {
self::cry();
echo self::age,'<br />';
echo self::$leg,'<br />';
}
public static function t2() {
static::cry();
echo static::age,'<br />';
echo static::$leg,'<br />';
}
}
class Human extends Animal {
public static $leg = 2;
public static function cry() {
echo '哇哇<br />';
}
}
class Stu extends Human {
const age = 16;
public static function cry() {
echo '嘤嘤<br />';
}
}
Stu::t1();//呜呜,1,4,self调用的是本类
Stu::t2();//嘤嘤,16,2,static调用的是运行时属于的类,如果没有就去父类找,父类没有,就去父类的父类找...
86 ?>