2016-05-20 41 views
0

的实例变量我有一个类,我通过拨打:访问在构造

$tagIt_Instance1 = new TagIt; 
$tagIt_Instance1->tag_table = 'tags'; 
// if maintenace is set to true, fill out these (for update) 
$tagIt_Instance1->tag_object_table = 'projects'; // the name of your table 
$tagIt_Instance1->tag_object_fieldname = 'project_tags'; // the name of your field 
$tagIt_Instance1->tag_object_id = isset($_GET['id']) ? $_GET['id'] : ''; // the corresponding id for the row of the table 
// end maintenance 
if (isset($_GET['tag_it']) && $_GET['tag_it'] == true) { 
    $tagIt_Instance1->TagItAjax(
     isset($_GET['action']) ? $_GET['action'] : '', 
     isset($_GET['term']) ? $_GET['term'] : '', 
     isset($_GET['match_id']) ? $_GET['match_id'] : '', 
     isset($_GET['tag_object_id']) ? $_GET['tag_object_id'] : '' 
    ); 
} 

在课堂上,在构造函数中,我想访问$tag_table

class TagIt 
{ 

    // edit defaults 
    private $debug = true; 
    /* this will reload the page if a new tag cannot be added. suggested to leave true as otherwise the user 
    could submit a page with a tag that is not in the system because of said error. if maintenance is enabled 
    then the tag would be removed eventually when matching occurs, but lets keep the db clean */ 
    private $reloadOnError = true; 
    private $confirmationMsgAdd = 'Do you want to add the new tag'; // no question mark or tag identifier, thats handled by jquery 
    private $confirmationMsgDel = 'Do you want to delete the tag'; 
    private $confirmationMsgDel2 = 'from the database as well'; 
    private $errorNewTag = 'An error occured. Could not process new tag!'; 
    private $generalErrorMsg = 'An error occured.'; 

    // do allow users to delete special cases 
    private $special_cases = array('featured'); 

    private $select2JS = '<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/select2/3.5.0/select2.min.js"></script>'; 
    private $select2CSS = '<link rel="stylesheet" href="/neou_cms/plugins/select2.css" type="text/css" media="all">'; 

    public $tag_table = ''; 

    /* enabling this will make sure that only tags in the database are 
    kept for a specific row when tagit checks for matches */ 
    public $maintenance = true; 

    // do not edit!!! /////////////////////// 

    // if maintenace is set to true these become applicable (leave blank here) 
    public $tag_object_table = ''; 
    public $tag_object_fieldname = ''; 
    public $tag_object_id = ''; 

    private $location = ''; 

    public function __construct() 
    { 
     // we don't want the query string messing up the AJAX request, thus we remove it 
     $this->location = strtok($_SERVER["REQUEST_URI"], '?'); 

     echo $this->tag_table; 
    } 

然而,每当我尝试并访问$this->tag_table,尽管$this->tag_table在脚本后面的函数中工作,我总是会得到一个空变量。我觉得这可能是一个范围问题,我不确定。

回答

1

您的$this->tag_table在构造函数中是空的,因为它仍然引用unset/empty变量(public $tag_table = '';)。

哪个是你的代码明显:

$tagIt_Instance1 = new TagIt; 
$tagIt_Instance1->tag_table = 'tags'; 

在上面的例子中,你正在构造对象然后只设置了$tag_table

您可以修改您的__construct()有标签表格传递给它,如果你需要:

function __construct($tag_table) { 
    // we don't want the query string messing up the AJAX request, thus we remove it 
    $this->location = strtok($_SERVER["REQUEST_URI"], '?'); 

    // set the tag table, allowing you to access 
    $this->tag_table = $tag_table; 

    echo $this->tag_table; 
} 

这意味着你可以跳过一步:

$tagIt_Instance1 = new TagIt('tags'); 

这是在事实上,常见的做法在实例化类时通过__construct()方法来“定义”像这样的变量。

+0

该死的男人尴尬我忘记了,它已经有一段时间了,因为我已经编码,我一直试图围绕我写的一些东西,而我回头哈哈。 – Alex

+0

@Alex我们都在那里之前哈哈!请记住,您可以通过'__construct()'传递所有这些变量,并使代码更易于维护:) – Darren