龙空技术网

web开发之-PHP面向对象(9)

踢球的打工仔 286

前言:

如今各位老铁们对“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静态对象