php面向对象——类常量与魔术常量
2020-06-29 04:51
1016 查看
普通常量
- 声明方式: define (‘常量名’,‘常量值’)
- 声明后不能修改值,不能重新声明,也不能销毁
- 声明常量后,该常量在页面任意处都可以访问 类似超级全局变量
类常量
类常量就是一个不可修改的静态属性
- 定义方式:在类内用
const
常量名。 定义和使用常量不需要$
符号 - 把在类中始终保持不变的值定义为类常量,声明后不能修改值,不能重新声明,也不能销毁
class Clerk{ // 定义类常量 表示所得税 const TAX_PATE = 0.08; public function getTax($salary){ echo '该交的税为'.$salary*self::TAX_PATE.'元'; } } $a = new Clerk(); $a->getTax(10000);
类常量的细节说明
- 常量名一般全部大写,中间可以有下划线TAX_PATE
- 定义类常量的同时,必须赋初始值,可以是整形 浮点型 字符串 布尔 数组 对象 NULL,不能是对象,变量,
- 类常量就像静态属性一样,属于类,不属于某个对象,不复制到对象内存
- 类常量的访问类似于静态属性
- 类常量可以被子类继承
- 类常量不能修改
- 从PHP7.1开始,情况下类常量默认为public,可以使用修饰符
class Clerk{ // 定义类常量 可以为数组 const MY_CONST = array('tax_rate'=>0.08, 'pi'=>3.14); } $a = new Clerk(); echo Clerk::MY_CONST['pi']; //Clerk::MY_CONST['pi'] = 0.01; // 数组内的数据也改不了
魔术常量
- 无法手动修改他的值,所以叫常量
- 但是值又是随环境变化的,所以叫魔术
- 可以写在任何位置
__FILE__返回文件当前的目录(包含文件名) 绝对路径
在框架开发或时网站的初始化脚本中,用来计算网站的根目录
echo '当前运行的是',__FILE__,'文件','<br>'; // 当前运行的是F:\wamp\www\PHP\面向对象\测试1.php文件
__LINE__返回文件当前的行号
在框架中,可以用来在debug时,记录错误信息
echo 'hi~ 我在第',__LINE__,'行','<br>'; // hi~ 我在第60行
__DIR__返回文件当前的目录(不包含文件名) 绝对路径
echo '当前目录',__DIR__,'<br>'; // 当前目录F:\wamp\www\PHP\面向对象
__CLASS__返回当前的类名 ; __METHOD__返回当前的方法名
class Human{ public function test(){ echo '你正在运行',__CLASS__,'下的',__METHOD__,'方法'; } } $a = new Human(); $a->test(); // 你正在运行Human下的Human::test方法
后期绑定/延迟绑定
其实很简单,知道绑定的是哪个类名之后,直接遵循权限修饰符的规则调用就行了
- static:: 静态调用static会绑定最初调用时的类名
- self:: 静态调用self会直接绑定他所在的类名
- parent:: 静态调用parent会绑定所在类的父类名
- this 绑定调用该方法的对象
- __CLASS__返回他所在的类名
self::和static::混合练习1
class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); // A::who() A static::who(); // B::who() B } } class B extends A { public static function who() { echo __CLASS__; } } B::test();
self::和static::混合练习2
class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); // A::who() A static::who(); // B::who() A } } class B extends A {} B::test()
self::和static::混合练习3
class Animal{ public static $leg = 4; public static function test(){ echo self::$leg,'<br>'; echo static::$leg,'<br>'; } } class Human extends Animal{ public static $leg = 2; } class Stu extends Human{ public static $leg = 3; } Stu::test(); // 4 3 Human::test(); // 4 2 Animal::test(); // 4 4
self::和static::混合练习4
class Animal{ public static $leg = 4; public static function test(){ echo self::$leg,'<br>'; echo static::$leg,'<br>'; } } class Human extends Animal{ public static $leg = 2; } class Stu extends Human{ } Stu::test(); // 4 2 Human::test(); // 4 2 Animal::test(); // 4 4
class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); // A static::who(); // A } } class B extends A {} B::test();
相关文章推荐
- PHP面向对象_魔术常量、魔术方法和预定义常量总结
- PHP面向对象_对象克隆clone和魔术方法__clone()
- PHP中的魔术常量、预定义常量和预定义变量
- PHP中几个常用的魔术常量
- 【PHP】- 魔术常量
- PHP5.3中新增的魔术常量__DIR__
- PHP 中的 常量 变量 魔术常量 ...
- php中的常用魔术常量
- Php 常见的魔术常量
- php中的几个常用的魔术常量
- PHP中的面向对象魔术方法大全
- PHP学习记录之常用的魔术常量详解
- PHP5.3中新增的魔术常量__DIR__
- Php的魔术常量
- PHP系统常量&&魔术常量
- PHP面向对象--类常量
- PHP中的魔术常量
- PHP中的面向对象魔术方法大全
- php常见魔术常量和魔术方法
- PHP手册-魔术常量