Вы не указали именно поэтому вы только хотите запускать данный метод один раз, когда вызываются определенные методы, но я собираюсь предположить, что вы загружаете или инициализируете что-то (возможно, данные, поступающие из БД), и вам не нужно циклов отходов каждый раз.
@DaveRandom предоставил отличный ответ, который будет работать точно. Вот еще один способ сделать это:
class foo {
protected function loadOnce() {
// This will be initialied only once to NULL
static $cache = NULL;
// If the data === NULL, load it
if($cache === NULL) {
echo "loading data...\n";
$cache = array(
'key1' => 'key1 data',
'key2' => 'key2 data',
'key3' => 'key3 data'
);
}
// Return the data
return $cache;
}
// Use the data given a key
public function bar($key) {
$data = $this->loadOnce();
echo $data[$key] . "\n";
}
}
$obj = new foo();
// Notice "loading data" only prints one time
$obj->bar('key1');
$obj->bar('key2');
$obj->bar('key3');
Причина это работает в том, что вы объявляете переменную кэша в static
. Существует несколько способов сделать это. Вы можете сделать эту переменную-член класса и т. Д.
Благодарим за отзыв! – ATLChris