我用这样的代码给你一个例子
这是使用“$ this->”
<?php
class A{
public function example(){
echo "A";
}
}
class B extends A{
public function example2(){
$this->example();
}
}
$b = new B();
echo $b->example2();
?>
并且这是使用parent ::
<?php
class A{
public function example(){
echo "A";
}
}
class B extends A{
public function example2(){
parent::example();
}
}
$b = new B();
echo $b->example2();
?>
$ this-&gt;之间有什么不同?和父::在OOP PHP?
答案 0 :(得分:8)
不同之处在于您可以访问基类的功能而不是访问实现的功能。
class A {
public function example() {
echo "A";
}
public function foo() {
$this->example();
}
}
class B extends A {
public function example() {
echo "B";
}
public function bar() {
parent::example();
}
}
这里有一些测试:
$a=new A();
$a->example(); // echos A
$a->foo(); // echos A
$b=new B();
$b->example(); // echos B
$b->foo(); // echos B
$b->bar(); // echos A
答案 1 :(得分:5)
parent::example()
调用父类方法,其中$this->example()
调用当前的类方法。
在您的示例中没有区别,因为类B
不会覆盖example()
方法。写这样的东西是很常见的(也许它会帮助你更好地理解这个概念):
class A {
public function example(){
echo 'A';
}
}
class B extends A {
public function example(){
echo 'B';
}
public function example2(){
$this->example();
}
public function example3() {
parent::example();
}
}
$b = new B();
$b->example2();//print B
$b->example3();//print A
答案 2 :(得分:2)
简单来说就是
$ this 是实例引用,因此无论何时使用 $ this ,它都会开始引用当前的类方法和属性。
父是父引用,可用于访问父类属性和方法。
答案 3 :(得分:0)
parent::
将调用父项的方法或属性。但是,由于这是引用类而不是任何类型的实例,因此您只能调用静态方法或属性。
$this->
指的是您在其中调用的对象的当前实例。
您还可以在对象或静态方法中引用self::
引用当前类(再次,此处不涉及实例)。