Mik*_*kel 5 php syntax class instantiation
使用同一个类的另一个对象(理想情况下在PHP 4.x中)初始化PHP类的实例有什么好方法(以及任何优点和缺点)?
这里initialize()基本上是我想要做的(例子从我的用例非常简化,见下文):
$product = new Product('Widget');
$product2 = new Product('Widget #2');
$product->initialize($product2);
echo $product->name; // echos "Widget #2"
class Product {
var $name;
function __constructor($name) {
$this->name = $name;
}
function initialize($product) {
// I know this cannot be done this way in PHP.
// What are the alternatives and their pros & cons?
$this = $product;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是"良好的编程习惯"; 我有20多年的其他语言编程经验,我知道什么是好的,什么不是.所以,如果这样做有意义,我们希望我们不会被挂断.我有一个用例使用一些我无法改变的开源代码,所以请耐心等待我的需要.我实际上是在围绕一些埋藏在WordPress核心深处的非常丑陋的数组代码创建一个OOP包装器.
我正在尝试编写它,以便在将来的版本中,他们可以摆脱丑陋的基于数组的代码,因为每个人都将使用新的API,否则完全封装这些讨厌的数组.但为了使它优雅地工作,我需要能够执行上述操作(在PHP 4.x中)并且我不想编写仅复制属性的代码.
在此先感谢您的帮助.
你们中的许多人都在暗示,clone但除非我误解了这个问题.clone制作副本; 这不是问题的症结所在.我试图让构造的对象"成为"传入的对象.此时我假设没有办法做到这一点,基于5个答案中有0个建议除了我之外的事实如果只是我的问题不明确,那么在选择最佳状态之前会等待一段时间.
在PHP 5中,对象克隆可能更相关:
http://php.net/manual/en/language.oop5.cloning.php
您可以定义一种特殊__clone方法.
在PHP 4和5中,您可以通过以下方式复制属性:
function copy($obj)
{
foreach (get_object_vars($obj) as $key => $val)
{
$this->$key = $val;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您写道"我不想编写只复制属性的代码",而且我不确定您的意思.