PHP基础知识巩固

  面向对象的一个重要特性就是继承。最近在看源码中,遇到的一系列问题表明的自己的基础还是有些许欠缺,主要问题如下:

  1:子类继承父类,如果子类没有定义构造方法,则会隐式的调用父类的构造方法,如果子类自定义了构造方法,则会调用子类的构造方法,但不会隐式调用父类的构造方法。在JAVA语言中,子类实例化,是必须要调用父类的构造方法(不管是隐式调用还是显式调用),要执行父类的构造方法,可使用parent::__construct()

  2:子类继承父类,子类则继承了父类除private修饰的所有变量和方法

class A {
        
    protected $name;

        /**
        ** 自定义了初始化构造方法
        **/
    public function __construct($name){
        $this->name = $name;
        $this->funcAa();
    }
}

class B extends A{

}

$b = new B();            //实例化错误 子类没有定义构造方法,默认会继承父类的构造方法

$b = new B('tom');         //正确

  2:$this关键字代表的当前的实例化对象,也就是new后面的对象

class A {
    public function funcA(){
        echo "This is A class";
    }

    public function funcAa(){
        /**
        **  指定的是B这个实例化对象
        **/
    $this->funcA();
    }
}

class B extends A{
        
    /**
    **    重写父类的方法
    **/
    public function funcA(){
        echo "This is B class";
    }
}

$b = new B();
$b->funcAa();        //子类没有,则自动调用父类的方法,子类复写了父类的方法,则调用子类自身的方法

 4:自动调用 __get() __set() 的时机仅仅发生在访问不存在的成员变量时。 因此,如果定义了成员变量 public $title 那么,就算定义了 getTitle() setTitle() , 他们也不会被调用。因为 $post->title 时,会直接指向该 pulic $title__get() __set() 是不会被调用的

 5:PHP对于类方法不区分大小写,即大小写不敏感, $post->getTitle()$post->gettitle() 是调用相同的函数。 因此, $post->title$post->Title 是同一个属性。即属性名也是不区分大小写的

你可能感兴趣的:(PHP基础知识巩固)