【问题标题】:How to use a PHP variable in a public class?如何在公共类中使用 PHP 变量?
【发布时间】:2013-07-26 00:58:02
【问题描述】:

我在公共类之外有一个变量。这个变量是:

$userid

我想在以下 PHP 类中使用该变量,但我遇到了问题:

public function printJavascript() {
    if ($this) {
        $page = $this - > page;
        $order = (($this - > order) ? implode(':', $this - > order) : '');
        $filter = (($this - > filter) ? implode(':', $this - > filter) : '');
    }

    echo "<script type=\"text/javascript\">\n";
    echo "var params = ''; var tblpage = '".$page."'; var tblorder = '".$order."'; var tblfilter = '".$filter."';\n";
    echo "function tblSetPage(page) { tblpage = page; params = '&page=' + page + '&order=' + tblorder + '&filter=' + tblfilter; updateTable(); }\n";
    echo "function tblSetOrder(column, order) { tblorder = column + ':' + order; params = '&page=' + tblpage + '&order=' + tblorder + '&filter=' + tblfilter; updateTable(); }\n";
    echo "function tblSetFilter(column) { val = document.getElementById('filter-value-' + column).value; tblfilter = column + ':' + val; tblpage = 1; params = '&page=1&order=' + tblorder + '&filter=' + tblfilter; updateTable(); }\n";
    echo "function tblClearFilter() { tblfilter = ''; params = '&page=1&order=' + tblorder + '&filter='; updateTable(); }\n";
    echo "function tblToggleCheckAll() { for (i = 0; i < document.dg.checkbox.length; i++) { document.dg.checkbox[i].checked = !document.dg.checkbox[i].checked; } }\n";
    echo "function tblShowHideFilter(column) { var o = document.getElementById('filter-' + column); if (o.style.display == 'block') { tblClearFilter(); } else {    o.style.display = 'block'; } }\n";
    echo "function tblReset() { params = '&page=1'; updateTable(); }\n";
    echo "</script>\n";
}
}

我将如何做到这一点?请提供建议,我感谢大家的帮助。

【问题讨论】:

标签: php class variables


【解决方案1】:

您可以通过在类方法的开头添加global $userid;$userid 定义为全局,就像Dave Chen 在他的评论中所说,您可以通过构造函数或其他方法将其传递给对象。在我看来,第二个选项将是更好的实施方式。

【讨论】:

    【解决方案2】:

    最好通过构造或作为另一个附加参数将该变量传递给类,但是,如果该变量已经是公共的,您应该可以使用它。

    <?php
    global $var;
    $var = 'there';
    
    class test {
        public function testy() {
            global $var;
            echo 'hi ' . $var;
        }
    }
    
    $class = new test();
    $class->testy();
    

    输出:

    tim@roflcopter /tmp $ vim lol.php
    hi there
    

    更好的选择(如上所述)是通过函数的参数传递变量。

    <?php
    $var = 'there';
    
    class test {
        public function testy($who) {
            echo 'hi ' . $who;
        }
    }
    
    $class = new test();
    $class->testy($var);
    

    【讨论】:

    • -1 for global 函数和方法有参数列表是有原因的。
    • @KevinM1 我明白这一点,我在句子的第一部分就说过了。 ([...] 要么通过构造将该变量传递给类,要么作为另一个附加参数 [...])。我添加了代码以将其作为参数传递,无论如何:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多