2011-12-04 46 views
3

我困惑於這種困惑,我不明白爲什麼我的HelperClass()下的全局$錯誤返回空,我可以驗證$ class-> error確實已經填滿與數據較早。PHP命名空間和類內全局變量問題

在這種情況下,我不知道有關於命名空間的問題嗎?請給我一些指點。

以下是一些相關的代碼。

在主文件

namespace Core; 
$class = new ControllerClass(); 
$error = $class->error; 
// verified that $error prints correctly here 
include ViewFile.php; 

在ViewFile.php

$helper = new HelperClass(); 
// __autoload function took care of the include 

在助手類:

namespace Core\Skeleton; 

class HelperClass { 
public function __construct() { 
global $error; 
// $error != $class->error as defined earlier  
// $error is empty here 
} 

回答

9

如果您使用的是自動加載磁帶機或包括您的類從另一個助手裏函數,那麼$error變量從未在「全局」範圍內聲明。它在一些地方結束了,並被處置。

在爲它分配一個值之前聲明它是共享的。

namespace Core; 
$class = new ControllerClass(); 
global $error; 
$error = $class->error; 

另外,雖然共享變量本身沒有問題。名稱$error看起來有些過於通用。也許你可以用一個不太具有吸引力或更具結構性的交換變量。 $GLOBALS["/var/log"]["controller_error"]或其他東西。

+0

謝謝!這工作! – blacklotus