前言:
如今各位老铁们对“php静态对象”大体比较重视,各位老铁们都想要分析一些“php静态对象”的相关文章。那么小编同时在网络上搜集了一些关于“php静态对象””的相关资讯,希望小伙伴们能喜欢,大家快快来学习一下吧!今天终于要到面向对象的最后一节课了,这里整理一下之前遗漏的知识点。在这节课之后,我们将会进入到数据库的环节,毕竟任何一个程序都需要使用数据库来保存数据的!
魔术方法
魔术方法就是PHP自带的一些类的方法,在这里,我们举例几个常用的,其他的大家可以通过查看手册来学习一下。
<?phpclass Magic{ public function __get($property){ echo "你想要查找".$property."值".PHP_EOL; } public function __set($property,$value){ echo "你要为当前对象,设置属性".$property."的值".$value.PHP_EOL; } public function __call($func,$arguments){ echo "调用当前对象的".$func."方法".PHP_EOL; echo "参数为".PHP_EOL; print_r($arguments); } public static function __callStatic($func,$arguments){ echo "调用当前类的静态方法".$func.PHP_EOL; echo "静态参数为".PHP_EOL; print_r($arguments); }}$magic = new Magic();$magic->testGet;$magic->testSet = "testset值";$magic->testFun("testFun的参数");Magic::testStaticFun("testStaticFun的参数");?>
以上会输出如下内容:
你想要查找testGet值你要为当前对象,设置属性testSet的值testset值调用当前对象的testFun方法参数为Array( [0] => testFun的参数)调用当前类的静态方法testStaticFun静态参数为Array( [0] => testStaticFun的参数)
注:__get:当要访问某个对象中不存在的属性时会自动执行此方法;
__set:当要设置某个对象的属性时,此属性不存在,则会执行此方法;
__call:当调用某个对象不存在的方法时,会执行此方法;
__callStatic:当调用某个类的静态方法时,此静态方法不存在,则会执行此方法;
魔术常量
魔术常量就是系统中内置的常量,会依据执行的代码来自动设定的值。例如:
<?phpclass Magic{ public function magicConst(){ echo __LINE__.PHP_EOL; echo __FILE__.PHP_EOL; echo __DIR__.PHP_EOL; echo __FUNCTION__.PHP_EOL; echo __METHOD__.PHP_EOL; echo __CLASS__.PHP_EOL; }}$magic = new Magic();$magic->magicConst();?>
以上会输出如下内容:
4C:\Users\86150\Desktop\web\index.phpC:\Users\86150\Desktop\webmagicConstMagic::magicConstMagic
__LINE__:表示当前代码的第几行;
__FILE__:表示当前文件的绝对路径;
__DIR__:表示当前文件的路径(不包括代码的名);
__FUNCTION__:表示当前执行的方法的名称;
__METHOD__:表示方当执行的方法的名称(会包含类名);
__CLASS__:表示当前执行的类名;
trait
php是不支持多继承的,但是,提供了trait关键字,类似实现多继承的方式,看如下例子:
<?phptrait TraitTest{ public $value; public function traitTestFun(){ echo "我是trait的测试方法:".$this->value.PHP_EOL; }}class TraitEnter{ use TraitTest; public function __construct($val){ $this->value = $val; }}$traitEnter = new TraitEnter("value值");$traitEnter->traitTestFun();?>
以上会输出如下内容:
我是trait的测试方法:value值
注:虽然TraitEnter中没有traitTestFun的方法,但是,trait关键字是代码复用的一个方法,想要复用代码,只需要类中使用use 关键字,注意这个use是在类的大括号中,不是在外面的引用空间;
继承中调用父类方法和重载
有的时候需要在子类中调用父类中的方法,我们可以使用parent关键字;
有的时候如果需要把父级的某个方法重载(重写),我们只要定一个同名的方法,且参数同父类一致。
看如下例子:
<?phpclass Father{ public function __construct() { echo "我是父级方法".PHP_EOL; } public function testFun() { echo "Father的testFun"; }}class Son extends Father{ public function __construct($value) { parent::__construct(); echo "传递过来的值为:".$value.PHP_EOL; } public function testFun() { echo "Son的testFun"; }}$son = new Son("sun value");$son->testFun();?>
以上会输出如下内容:
我是父级方法传递过来的值为:sun valueSon的testFun
注:调用父级方法,使用parent::父级方法名称(),以上代码调用了父级的构造函数:parent::__construct();
重载(重写):我们只要定一个同名的方法,且参数同父类一致。
标签: #php静态对象