有没有一种方法可以防止在PHP中重写属性?如果是 - 如何?PHP - 重写属性
回答
做这样的事情的唯一方法是在课堂上玩__set()
。 但是,__set
仅用于不可访问的属性。
对于公共财产,我不认为有什么办法可以防止重写。
你应该检查出的官方文档:http://fr2.php.net/manual/en/language.oop5.overloading.php
谢谢,但我知道什么意思__set并不能帮助我,因为我的属性被声明。 – user997379
所以我不认为你想要做什么是可能的... 尝试找到另一种方式:将这些受保护的变量存储在私有数组中,并使用特定的__get – Lao
来访问它们所以,我没有声明我的属性和。 .. :) – user997379
“是的”,如果你让他们常量。请参阅How to implement a read-only member variable in PHP?的答案,不要跳过评论。
实施例:
class user {
const ALWAYS_ONE = 1;
}
我想,声明特性private
也可防止过载但它们也无法进入到下降类。
谢谢,但我需要调用属性在子类(它包含对象)与“属性界面” – user997379
我认为@Jared Farrish是正确的,使用一种方法。 (很难说清楚什么时候你不能说出完整的场景) – chelmertz
class TheBaseClass {
private $nomod = 'foo';
public function getNoMod() {
return $this->nomod;
}
}
class TheChildClass extends TheParentClass {
public function funcUsesNomod(){
return 'The value of nomod is '. $this->getNomod();
}
}
我是Jared Farrish,我赞同这个信息。 –
为了公平对待@ dev-null-dweller,OP似乎暗示一种方法不起作用(由于某种原因它必须是一个属性)。不过,我已经给你两个upvotes。 –
我想这是你想要什么:
class A{
private $a;
public function __construct(){
$this->a = 'A';
}
public function __get($property){
return $this->{$property};
}
}
class B Extends A{
public function getA(){
return $this->a;
}
public function __get($property){
return parent::__get($property);
}
}
$b = new B;
echo $b->getA();
只有当你想要一个方法而不是一个属性,并且你控制了子类的定义时,这才有效。 –
没有:(我不想叫这个属性作为财产:D谢谢。 – user997379
@ user997379 - 你将不得不显示你是如何需要它的实现;简短的回答,这听起来不可能的[''final'-like](http://en.wikipedia.org/wiki/Final_%28Java%29)在PHP中的功能不需要使用方法。 –
- 1. 重写属性属性
- 2. PHP OO:抽象类的重写属性
- 3. 重写name属性
- 4. 如何获取属性重写属性?
- 5. 重写的CSS属性
- 6. 重写厨师的属性
- 7. 重写在GLSL属性
- 8. NHibernate和重写的属性
- 9. 重写linq属性c#
- 10. 超类的重写属性
- 11. 重写抽象只读属性以读取/写入属性
- 12. 为什么C#从重写属性取代重写属性的值?
- 13. 使用动态属性变量不起作用的重写属性PHP 7.0
- 14. Javascript属性重载ala PHP?
- 15. 重写属性文件中的键值通过重写ResourceBundle
- 16. 获取重写属性的属性时的行为不同?
- 17. 为什么winforms设计器忽略重写属性的属性?
- 18. 通过linq获取重写属性的属性表达式
- 19. 重写Spring属性是否更新引用它的属性?
- 20. 重写HTML表格边框属性
- 21. 重写属性返回类型,C#
- 22. 重写垂直对齐属性
- 23. 如何使用slice()重写.length()属性?
- 24. 重写规则与属性URLS
- 25. 厨师属性重写未生效
- 26. FactoryGirl重写父类属性子类
- 27. 重写uitableviewcell属性有困难
- 28. 重写GWT主题body margin css属性?
- 29. 使用preg_replace重写表单属性
- 30. 重写属性不起作用
你的意思是像[公有,保护或私有(http://php.net/manual/en/language.oop5.visibility。 PHP)? –
我有一个被称为pbase的类Base中的受保护的属性(例如),我想防止覆盖子类中的属性。 – user997379
使它['私人'](http://codepad.org/9sxXFi2X)? –