在构造函数中访问实例变量

时间:2016-05-20 02:18:30

标签: php

我有一个课程,我打电话来:

$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 个答案:

答案 0 :(得分:1)

您的$this->tag_table在构造函数中为空,因为它仍然引用了未设置/空变量(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');

事实上,通常的做法是通过&#34;定义&#34;实例化类时通过__construct()方法的这类变量。