我曾经有过像这样定义的函数(在ubuntu 9.10下运行正常):
public function __toString( $surNameFirst = false) {
if ($this->givenName . $this->surname == '') return null;
else .......
}
我将我的机器更新到ubuntu 10.04(和php版本:5.3.2-1ubuntu4.2)之后 )我的应用程序开始显示像这样的错误==>
致命错误:方法Application_Model_Person :: __ tostring()不能在第39行的/home/speshu/Development/where/application/models/Person.php中获取参数
Call Stack:
0.0001 616576 1. {main}() /home/speshu/Development/where/public/index.php:0
0.0294 1008248 2. Zend_Application->bootstrap() /home/speshu/Development/where/public/index.php:35
0.0294 1008328 3. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /usr/local/lib/ZendFramework-1.10.0/library/Zend/Application.php:355
0.0294 1008328 4. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /usr/local/lib/ZendFramework-1.10.0/library/Zend/Application/Bootstrap/BootstrapAbstract.php:582
0.0387 1991416 5. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /usr/local/lib/ZendFramework-1.10.0/library/Zend/Application/Bootstrap/BootstrapAbstract.php:618
0.0387 1991776 6. Bootstrap->_initDoctrineCLI() /usr/local/lib/ZendFramework-1.10.0/library/Zend/Application/Bootstrap/BootstrapAbstract.php:665
0.0387 1991856 7. Bootstrap->_initDoctrine() /home/speshu/Development/where/application/Bootstrap.php:66
0.0406 2245200 8. Doctrine_Core::loadModels() /home/speshu/Development/where/application/Bootstrap.php:93
答案 0 :(得分:8)
从版本5.3 The __toString magic method can no longer accept arguments开始。
在任何情况下,你真的应该用魔法吗?为什么不申声toString($ whatever)呢?
答案 1 :(得分:2)
function __toString() {
if(func_num_args()>0) {
$surNameFirst=func_get_arg(0);
} else {
$surNameFirst=false;
}
....
这就是我解决这个问题的方法,它既脏又丑......但是在找到更长久的解决方案之前,它确实让系统再次运行。
您应该能够弄清楚如何最好地扩展它以满足您的需求,请注意,如果使用此方法,最好传入一个assosiative数组,因为它更容易访问数据。
答案 2 :(得分:2)
我认为调用$ obj-> __ toString()是非常难看的。 最好只调用echo $ obj;如果你不想传递参数并调用$ obj-> toString($ param);如果要指定参数。
答案 3 :(得分:0)
另一种可能的解决方法。
class test
{
var $toStringArgs = array();
function SetToStringArgs()
{
$this->toStringArgs = func_get_args();
}
function __toString()
{
var_dump($this->toStringArgs);
}
}
$test = new test();
$test->SetToStringArgs('firstname','lastname');
$test->__toString();