您的位置 首页 php

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

今天终于要到面向对象的最后一节课了,这里整理一下之前遗漏的知识点。在这节课之后,我们将会进入到数据库的环节,毕竟任何一个程序都需要使用数据库来保存数据的!

魔术方法

魔术方法就是PHP自带的一些类的方法,在这里,我们举例几个常用的,其他的大家可以通过查看手册来学习一下。

 <?php
class 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:当调用某个类的静态方法时,此静态方法不存在,则会执行此方法;

魔术常量

魔术常量就是系统中内置的常量,会依据执行的代码来自动设定的值。例如:

 <?php
class 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();
?>  

以上会输出如下内容:

 4
C:\Users\86150\Desktop\web\index.php
C:\Users\86150\Desktop\web
magicConst
Magic::magicConst
Magic  

__LINE__:表示当前代码的第几行;

__FILE__:表示当前文件的绝对路径;

__DIR__:表示当前文件的路径(不包括代码的名);

__FUNCTION__:表示当前执行的方法的名称;

__METHOD__:表示方当执行的方法的名称(会包含类名);

__CLASS__:表示当前执行的类名;

trait

php是不支持多继承的,但是,提供了trait关键字,类似实现多继承的方式,看如下例子:

 <?php
trait 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关键字;

有的时候如果需要把父级的某个方法重载(重写),我们只要定一个同名的方法,且参数同父类一致。

看如下例子:

 <?php
class 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 value
Son的testFun  

注:调用父级方法,使用parent::父级方法名称(),以上代码调用了父级的构造函数:parent::__construct();

重载(重写):我们只要定一个同名的方法,且参数同父类一致。

文章来源:智云一二三科技

文章标题:web开发之-PHP面向对象(9)

文章地址:https://www.zhihuclub.com/149920.shtml

关于作者: 智云科技

热门文章

网站地图