【问题标题】:How should I share / pass variables across different methods in a PHP Class?我应该如何在 PHP 类中的不同方法之间共享/传递变量?
【发布时间】:2010-08-05 11:25:43
【问题描述】:

我正在尝试从一个类的方法中设置一个值,并尝试在另一个方法中获取它。示例代码如下。我认为以下类型的 set/get 可以在 Java 类中使用。谷歌搜索,但仍然找不到相关的解决方案。

我搜索了“如何在 PHP 中跨函数共享数据”,找到了How can I call member variables of a class within a static method?,但这并没有回答我的问题。

<?php
class MyClass
{
    public $cons;

    function showConstant() {
        $this->setConstant(100); /* assign value to variable here */
        $this->showConstantGetter();
    }

    /* setter */
    function setConstant($aCons) {
        $cons  = $aCons;
    }

    /* getter */
    function getConstant() {
        return $cons;
    }


    function showConstantGetter() {
        echo "<br>getting const : ".$this->getConstant(); /* use the variable's value in this method here */
    }

}

$classname = "MyClass";
$class = new MyClass();
$class->showConstant();

?>

【问题讨论】:

    标签: php class function variables


    【解决方案1】:

    您必须使用$this-&gt;cons 而不是$cons,仅此而已。

    【讨论】:

    • +1,悲伤但真实。每次我回去编写一些 PHP 代码时,我都会忘记这一点……不是那么直观 ;)
    • 是的,它非常直观。这就是对象的工作方式。每种具有动态对象变量的语言都需要您限定访问权限。只有像 C++ 和 Java 这样的编译语言才允许您在没有限定条件的情况下访问成员,但是您可能会意外地“隐藏”成员变量。明确访问对象是明确的唯一方法。
    • “直觉”只是一个习惯问题。如果你一生都在用 C++ 编程,现在开始使用 PHP,那显然不直观。
    • 抱歉,我仍然没有得到值: /* setter / function setConstant($aCons) { $this->cons = $aCons; } / getter */ function getConstant() { $this->cons; }
    • 你忘记了 getConstant 中的回声
    【解决方案2】:

    几乎不错,但是:

    function setConstant($aCons) {
            $this->cons  = $aCons;
        }
    
        /* getter */
        function getConstant() {
            return $this->cons;
        }
    

    【讨论】:

      【解决方案3】:

      要在 PHP 中访问实例变量,您需要在它们前面加上 $this-&gt;

      在你的例子中:

      函数 getConstant() { 返回 $this->cons; }

      要访问类(或静态)变量,请使用 self:: 而不是 $this-&gt;

      【讨论】:

      【解决方案4】:

      注意是这样的:

      $this->cons = $aCons;

      不是这个:

      $this->$cons = $aCons;

      如果您指定$this-&gt;$cons,PHP 将首先查看$cons 中的值并将其用作实例变量的名称。在您的情况下,$cons 中还没有任何内容,因此它会找到一个空的名称,这会导致错误消息。

      这种类型的间接不是你想在这里做的,所以不要把美元符号放在那里两次!

      【讨论】:

        【解决方案5】:

        您好,感谢您的回答。这是一个非常快速的解决方案。非常欣赏它。谢谢大家。以下是完整的代码:

        <?php
        class MyClass
        {
            var $cons;
        
            function showConstant() {
                $this->setConstant(100); /* assign value to variable here */
                $this->showConstantGetter();
            }
        
            /* setter */
            function setConstant($aCons) {
                $this->cons  = $aCons;
            }
        
            /* getter */
            function getConstant() {
                return $this->cons;
            }
        
        
            function showConstantGetter() {
                echo "<br>getting const : ".$this->getConstant(); /* use the variable's value in this method here */
            }
        
        }
        
        $classname = "MyClass";
        $class = new MyClass();
        $class->showConstant();
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-30
          • 2021-01-23
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-19
          相关资源
          最近更新 更多