我想知道为什么在php中没有$parent->function();
语法,但是我们可以使用parent::function();
,它看起来像它在静态类中使用。我错过了一些PHP的OOP基础知识?parent ::在实例化类
3
A
回答
2
我承认这似乎有些奇怪 - 你没有手动^^
在错过什么,但:
- 一般来说,当子类重新定义的方法这已在父级中定义,您希望孩子的方法完全覆盖父级的方法
- 除了
__construct
,我承认 - 这可能就是为什么在手册中明确提到你必须亲自调用父母的方法__construct
。
- 除了
- 一般来说,非静态方法工作时,你就用
$this
调用无论是在儿童或父类的同一个实例的方法;不需要知道方法的实际位置。 - 使用
parent::
工作得很好,即使它看起来像一个静态调用
而这里的显示parent::
代码示例工作正常:
class Father {
public function method() {
var_dump($this->a);
}
}
class Son extends Father {
protected $a;
public function method() {
$this->a = 10;
parent::method();
}
}
$obj = new Son();
$obj->method();
你会得到这样的输出:
$ /usr/local/php-5.3/bin/php temp.php
int(10)
Wh ich显示父类中的方法有权访问$this
以及在子类中定义的属性。
2
嗯,其实parent
引用静态父类 - 没有理由假设有一个实例$parent
只是因为存在$child
,即使有,$child
就不必$parent
访问。
最后,一个例子,其中通常的class dog extends animal
OOP解释不起作用! :)
1
因为使用$parent
假定您已实际实例化父类。
如果您的语法建议工作,这意味着每次您实例化一个对象,您实例化2个或更多对象。
在PHP中,每个变量都必须包含一个字符串,整数(或其他数字格式),数组,对象或资源。 $this
包含一个对象,它恰好是您当前所在的对象。
为了创建$parent
,您必须在$parent
中放置一个对象。你的父类在技术上没有实例化,所以它不能被分配给一个变量。
BTW parent::function();
可以访问全部$this
。
因此,这个工程
class Test
{
public function test()
{
echo $this->testing_var;
}
}
class OtherTest
{
public function run()
{
$this->testing_var = "hi";
Test::test(); // echos hi
}
}
而如果是使用一类外,并会告诉你应该声明为static这会报错。
Test::test();
相关问题
- 1. 从超类Java实例化子类Java
- 2. 在哪里实例化类
- 3. 实例化单例类
- 4. 类的实例化
- 5. 实例化es6类
- 6. Java类实例化
- 7. C++实例化类
- 8. 类实例化Java
- 9. Java类实例化
- 10. 实例化参数化类
- 11. 替补完全实例化类与部分实例化祖先类
- 12. 从类内实例化类
- 13. 显式实例化C++类模板实例化相关基类?
- 14. 类定义实例实例化问题
- 15. 接口实例与类实例化
- 16. AS3:实例化类的实例
- 17. 在类中初始化类实例
- 18. 已知类型的实例化类
- 19. 以下类不能被实例化:android.support.constraint.ConstraintLayout
- 20. 类不能实例化
- 21. Android:尝试实例化类
- 22. TrueZip类无法实例化
- 23. 实例化对象的类
- 24. 实例化类不工作
- 25. 实例化一个类 - Python
- 26. 实例化的抽象类
- 27. PHP:问题实例化类
- 28. php:实例化类动态
- 29. Python实例化子类
- 30. 检查类被实例化
我真的不觉得这很奇怪。因为变量不能包含类,所以它们必须包含实例化类的对象。因此,为了让'$ parent'存在,你必须实例化父对象以及子对象。 – 2010-01-10 20:03:46