我目前的任务是升级PHP5之前的代码库以符合现代运行时。
该库包含以下模式的几种用法:
$foo = new foo();
foreach($foo as &$ref) {
// Do something with $ref
}
根据PHP文档,从PHP 5.2开始这是非法的,并且会引发异常(http://php.net/manual/en/migration52.error-messages.php)
我的问题是,如何在符合PHP 5.2+标准的情况下更改语法以保持相同的功能?如果我只是删除&符号就足够了吗?
$foo = new foo();
foreach($foo as $ref) {
// Do something with $ref
}
答案 0 :(得分:3)
对于iterating through an object and its properties并修改原始对象,您可以像这样使用foreach()
:
// Iterate over the object $foo
foreach ($foo as $key => $ref) {
// Some operation
$newRef = $ref;
// Change the original object
$foo->$key = $newRef;
}
这将允许您仅对可见属性进行迭代(通常需要)。但是,由于您要将代码迁移到OOP中,因此可能需要将抽象放在不同的级别。上面的代码适用于数组,但在OOP中这更为正常。同样,这取决于案例:
// Create the object
$foo = new foo();
// Delegate the iteration to the inner method
$foo->performAction();
这使得调用performAction()
的代码不需要知道foo()
的属性,让对象处理其属性。为什么房子需要知道门的旋钮?那是门的责任。
答案 1 :(得分:-1)
如果$foo
仅包含数组或标量值。做
foreach($foo as $key => $ref) {
// Do something with $ref
$foo->{$key} = $ref;
}