回答
您应该封装中含有类两个类别,并提供了相应的接口(如私有变量
class YourFirstClass {
public $variable;
private $_variable2;
public function setVariable2($a) {
$this->_variable2 = $a;
}
}
class YourSecondClass {
public $variable;
private $_variable2;
public function setVariable2($a) {
$this->_variable2 = $a;
}
}
class ContaingClass {
private $_first;
private $_second;
public function __construct(YourFirstClass $first, YourSecondClass $second) {
$this->_first = $first;
$this->_second = $second;
}
public function doSomething($aa) {
$this->_first->setVariable2($aa);
}
}
研究(谷歌)制定者/吸气:“组成了继承”
脚注:对于非创造性的变量名称感到抱歉。
您是要求在运行时或编程时执行此操作吗?
我将假定运行时,在这种情况下使用c1有什么问题屁股inheritance?
创建一个从您想要合并的两个继承的新类。
不下调,但PHP不支持(afaik)多重继承。 – ChristopheD 2010-03-03 20:56:01
这不会让您访问继承类的私有成员。 – tloach 2010-03-03 20:56:15
是的,对不起,PHP不支持多重继承。但是,通过堆叠类来从一个或另一个继承,可以模拟多重继承。 私人会员不会被继承,是的。但是,如果这是一个问题,将保护措施转变为公众并不是特别困难(我们不会开始讨论是否真的需要私人保护)。 – 2010-03-03 21:21:57
# Merge only properties that are shared between the two classes into this object.
public function conservativeMerge($objectToMerge)
{
# Makes sure the argument is an object.
if(!is_object($objectToMerge))
return FALSE;
# Used $this to make sure that only known properties in this class are shared.
# Note: You can only iterate over an object as of 5.3.0 or greater.
foreach ($this as $property => $value)
{
# Makes sure that the mering object has this property.
if (isset($objectToMerge->$property))
{
$objectToMerge->$property = $value;
}
}
}
# Merge all $objectToMerge's properties to this object.
public function liberalMerge($objectToMerge)
{
# Makes sure the argument is an object.
if(!is_object($objectToMerge))
return FALSE;
# Note: You can only iterate over an object as of 5.3.0 or greater.
foreach ($objectToMerge as $property => $value)
{
$objectToMerge->$property = $value;
}
}
你首先应该考虑的方法,就好像它在那里的array_combine()
的对象对应。然后考虑第二种方法,就好像它在array_merge()
的对象所在的位置。
- 1. 如何合并两个PHP Doctrine 2 ArrayCollection()
- 2. 如何合并两个数组与PHP
- 3. 在php中合并两个图像
- 4. 在php中合并两个图像
- 5. PHP:如何结合这两个类?
- 6. 在C#中合并两个DateTime类型
- 7. 在Orientdb中合并两个类
- 8. 合并/合并两个php函数
- 9. 如何在Java中“合并”两个URI?
- 10. 如何在C#中合并两个XmlDocuments
- 11. 如何在iPhone中合并两个UITextView?
- 12. 如何在Java中合并两个GIF?
- 13. 如何使用SimpleXML在PHP中合并两个XML文档?
- 14. 如何通过在PHP中的值来合并两个数组?
- 15. 如何在php中合并两个csv文件?
- 16. 如何在php中合并两个数组的索引?
- 17. 如何在PHP中合并两个MVC系统?
- 18. 如何在PHP中合并这两个特定的数组?
- 19. 如何在MicroStrategy合并两组一类
- 20. PHP合并两个阵列
- 21. 合并两个资源PHP
- 22. php合并两个数组
- 23. 合并两个PHP脚本
- 24. 合并及和两个PHP
- 25. 如何整合两个java类并在android中使用它?
- 26. 如何在SQLAlchemy中合并两个模型类
- 27. 如何在Android中链接/合并/合并两个联系人?
- 28. 如何在JSON.NET中合并/合并两个JArrays
- 29. 合并两个类似PSObjects
- 30. 如何合并两个DisposeBags?
不,我需要运行它。 – user198729 2010-03-03 21:00:30
@ user198729:考虑到你的“在运行时”的要求,你真的想要合并两个*类*,还是你的意思是说两个*对象*? – 2010-03-03 21:07:35