我在PHP中有一个调用SOAP服务的方法,解析一些数据并返回它。
它将返回相同的数据 - 它会询问数据对象中的记录数。
我需要传球两次。
我的问题是,在PHP中构造这个的最佳实践是什么?我试过看看函数是否已被调用。我是否使用静态变量/函数?
function MinimumRequired() {
return $this->NumberPeopleJoined();
}
function NumberPeopleJoined () {
if (isset($NumberPeople)) {
Debug::Show($NumberPeople);
}
static $NumberPeople;
$NumberPeople = Surge_Controller::NumberPeopleJoined();
return $NumberPeople;
}
谢谢!
答案 0 :(得分:1)
只需创建一个本地类成员,然后检查它是否有值。如果没有,请将值设置为从Surge_Controller
检索到的值,如果已经设置,则只返回值:
<?php
class Surge_Controller {
static public function NumberPeopleJoined() {
echo "Surge_Controller::NumberPeopleJoined() got called.\n";
return 2;
}
}
class Foo {
protected $cacheNumberPeople;
function MinimumRequired() {
return $this->NumberPeopleJoined();
}
function NumberPeopleJoined () {
if( !isset( $this->cacheNumberPeople ) ) {
$this->cacheNumberPeople = Surge_Controller::NumberPeopleJoined();
}
return $this->cacheNumberPeople;
}
}
$foo = new Foo( );
echo $foo->numberPeopleJoined( ) . "\n";
echo $foo->numberPeopleJoined( ) . "\n";
输出:
$ php foo.php
Surge_Controller::NumberPeopleJoined() got called.
2
2
答案 1 :(得分:0)
简单的方法是拥有一个全局变量,并检查是否为“true”,并在函数结束时将其设置为true。该值也可以缓存...
但是如果你想让你的代码变得有趣,你可以使用下划线: http://brianhaveri.github.com/Underscore.php/#once http://brianhaveri.github.com/Underscore.php/#memoize