php面向对象之操作符'::'的用法简述
操作符“::”相比伪变量$this只能在类的内部使用来说更为强大。操作符“::”可以在没有任何声明任何实例的情况下访问类中的成员方法活成员变量。
注意事项:
这里的关键字不再是public、private、protected或者static等,而是以下三种情况:
(1)parent :可以调用父类中的成员变量、成员方法和常量;
(2)self:可以调用当前类中的静态成员和常量;
(3)类名:可以调用本类中的变量、常量和方法。
<?php class Hero{ const CHARACTER = '奥利安娜'; function __construct(){ echo '5楼要玩中单'.Hero::CHARACTER.'不给就送<br>'; } } class I_Hero extends Hero{ const ROLE = '亚索'; function __construct(){ parent::__construct();//引用父类中的构造函数 echo '4楼中单'.self::ROLE.'贼6<br>'; } } $gamer = new I_Hero();
结果见下图:
php面向对象:类的继承
子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构造方法,如果子类有自己的构造方法,php会先调用子类中的方法;当子类中没有时,php则去调用父类中的构造方法,这也就是我们说的继承。
类的继承是通过关键字extends
php面向对象之数据隐藏
(1)public
中文翻译是公共的。顾名思义,就是公开的,不需要隐藏的数据信息。可以在程序中的任何位置(类内、类外)被其他的类和对象调用。子类可以继承和使用父类中所有的公共成员。
(2)private
中文翻译为私人的,私有的。被private修饰的变量和方法,只能在所在的类的内部被调用和修改,不可以在类的外部被访问。在子类中也不可以。
<?php class Person{ private $name = '奥利安娜'; public function setName($name){ $this->name = $name; } public function getName(){ return $this->name; } } //正确 $person = new Person(); $person->setName("布里茨"); echo $person->getName(); //错误 echo Person::$name;
上述实例中,对私有变量$name的修改与访问,只能通过调用成员方法来实现。如果直接调用,就会发生错误。
(3)protected
中文翻译为保护的意思。private关键字可以将数据完全隐藏,除了在本类中,别的地方都不可以调用,子类中也不可以。但是有些情况是部分变量需要在子类中可以调用,但是对另外的类来说,还是要做到封装。这个时候就要用到我们的protected关键字了。
用protected修饰的类成员,可以在本类和子类中被调用,但是在其他地方不能被调用。
<?php class Person{ protected $name = '奥利安娜'; } class Person1 extends Person{ public function getName(){ echo $this->name; } } //正确 $person = new Person1(); $person->getName();
提示:
虽然在PHP中没有对修饰变量的关键字做强制性的规定和要求,但从面相对象的特征和设计方面考虑,一般使用private和protected关键字来修饰变量,以防止变量在类外被直接修改和调用。
php面向对象之$this->用法简述
什么是$this?
$this的意思就是本身,在$this中有个指针,谁调用它,他就指向谁,它只能在类内部使用。
<?php class Person{ public $name; public function __construct($name){ $this->name = $name; var_dump($this); } public function showInfo(){ echo $this->name; } } $person = new Person('cyy'); var_dump($person); $person->showInfo(); echo '<br>'; $person = new Person('cyy2'); var_dump($person); $person->showInfo(); echo '<br>';
从上图我们可以看到结果对比。打印出来的$this和$preson结果是一样的,也就是说,$preson调用了$this,$this指向的就是它,所以说结果是一样的。因此$this究竟指向哪是由所实例化的对象决定的,指向当前对象实例的指针。包括变量、方法都是如此。也就是印证了我们上面的话谁调用它,他就指向谁。