我不太清楚爲什麼會發生這種情況,或者如何正確地解釋它,但也許有人可以對此進行說明。變量爲空直到重新分配
我有一個基於CodeIgniter/Opencart框架利用註冊表,控制器和模塊的CMS系統。我遇到了,我以前保存的變量到註冊表的情景:
$this->application_page = 'current/page';
但由於某些原因,當我把它叫做中的應用:
echo empty($this->application_page)?'yes':'no';
//Returns Yes
但是..當我重新分配它:
echo empty($this->application_page)?'yes':'no';
//Returns Yes
$page = $this->application_page;
echo empty($page)?'yes':'no';
//Returns No
一個的var_dump回報:
var_dump($this->application_page);
string 'current/page' (length=12)
只需使用$page
即可輕鬆解決此問題,但我很想知道爲什麼會發生這種情況?
UPDATE:
所以我用_isset
功能混亂周圍,但沒有得到它的工作,可能是我的錯誤,可能不是。這裏是這一切是如何一起工作的:
class Registry {
private $data = array();
public function get($key){ return (isset($this->data[$key]) ? $this->data[$key] : NULL); }
public function set($key,$val){ $this->data[$key] = $val;
}
abstract class Controller {
protected $registry;
public function __construct($registry){ $this->registry = $registry; }
public function __get($key){ return $this->registry->get($key); }
public function __set($key,$value){ $this->registry->set($key, $value); }
}
class Applications {
private $registry;
function __construct($Registry){ $this->registry = $Registry; }
function __get($key){ return $this->registry->get($key); }
function __set($key,$val){ return $this->registry->set($key,$val); }
public function buildApplication(){
$this->application_page = 'current/page';
$application = new application($this->registry);
}
}
class Application extends Controller {
public function index(){
echo empty($this->application_page)?'yes':'no';
//Returns Yes
$page = $this->application_page;
echo empty($page)?'yes':'no';
//Returns No
}
}
希望這有助於? 有一個錯字,註冊表的功能不是神奇的方法。在應用程序中還聲明瞭$ registry。
你是否100%確定你沒有在你的var名錯誤,而測試呢? – NDM
對不起延遲!是的,我確定,我在發帖前加倍檢查了大約5次=) – Corey
@Corey請看我更新的答案。 – ComFreek