【问题标题】:Referencing class function variables in php在php中引用类函数变量
【发布时间】:2012-11-01 13:59:52
【问题描述】:

我一直在查看 PHP 变量范围参考页面,但似乎找不到明确的答案。我正在使用这个基本模型,我想在其中调用一个类函数并使其所有变量都可以在类外部访问。我也想避免使用全局声明,并尽可能以最有效的方式执行此操作。

class my_class() {
    function my_class_function() {
        $my_class_function_variable = 'juice';
            return $my_class_function_variable;
    }
}
$class_instance = new my_class();

function display_juice() {
    $class_instance::my_class_function();
    $my_class_function_variable;
}

我所缺少的内容是否有一个快速的答案?我没有收到任何输出或错误。

编辑

当我在类中而不是在函数中声明以下内容时,出现语法错误。

public $current_user = wp_get_current_user();

解析错误:语法错误,意外 '(',期待 ',' 或 ';'

【问题讨论】:

  • 变量范围,阅读所有内容......如果你想要一个类变量,请将其定义为公共类属性
  • 错误太多了:静态调用,没有返回,不是类成员,实例没有传递给函数..哇..
  • 你的问题不完整和清楚.. P.S.在您的示例代码中,您没有执行任何操作.. 1 个类(带有 1 个函数),第二个函数和一个 $call_instance ......我不知道你想要发生什么......
  • 顺便说一下类的声明没有 ().. 它不是函数
  • @Svetlio 感谢您的最后说明。我想从类函数中回显变量。这只是一个例子。我确实在类函数中定义了很多变量,我想从类外部调用它们。

标签: php scope


【解决方案1】:

如果它们是公共的,您可以访问类中所有设置的变量。 如果它再次公开,您可以访问它的任何功能...... 这是示例。我有默认值'mydefault'。 我使用它,然后我更改它并再次使用它..

class my_class {
    public $variable = "mydefault";

    public function change_variable($value) {
        $this->variable = $value;
    }
}

function display_juice() {
    $class = new my_class;
    echo $class->variable; // echo default value - 'mydefault'
    $class->change_variable('newvalue');    
    echo $class->variable; // echo default value - 'newvalue'
}

display_juice();

编辑..

class my_class {
    public $variable;

    public function __construct() {
        $this->variable = wp_get_current_user();
    }
}

【讨论】:

  • 查看我的编辑,当我将公共变量声明为全局 WP 函数时出现错误。
  • 您不能为默认值设置函数。添加1个构造函数来设置它..就像我的编辑..
  • 你能在__construct中加入条件吗?
  • __construct 是一个在所有其他函数之前的函数.. 那为什么不呢?我的构造名称有误 :) 抱歉
  • 这看起来很奇怪,例如,如果你熟悉 WP 函数,有一个叫做 get_post_meta($post->ID, 'meta_key');如果我在 __construct 函数中声明,则每个 $post->ID 的值都必须更改,所以我不确定为什么在调用类时设置变量。应该是当我调用函数(即 display_juice)时,会调用该新变量,而不是在初始化时调用。
【解决方案2】:

您需要将 my_class_function() 设为静态,您可以使用 my_class::my_class_function() 调用它

http://php.net/manual/en/language.oop5.static.php

同样按照下面的建议,您需要返回“果汁”。

return 'juice';

【讨论】:

    【解决方案3】:

    您目前不返回任何东西,您必须执行以下操作:

    class my_class() {
        function my_class_function() {
            $my_class_function_variable = 'juice';
            return $my_class_function_variable;
        }
    }
    
    function display_juice() {
        $class_instance = new my_class(); //Needs to be inside the function
        $my_class_function_variable = $class_instance->my_class_function();
        echo $my_class_function_variable;
    }
    display_juice();
    

    如果您想使用静态函数或变量,您可以这样做,这样就无需创建 my_class 的实例:

    class my_class() {
        static function my_class_function() {
            return 'juice';
        }
    }
    
    function display_juice() {
        $my_class_function_variable = my_class::my_class_function();
        echo $my_class_function_variable;
    }
    display_juice();
    

    【讨论】:

      【解决方案4】:

      我会让你尝试访问公共成员的变量

      class my_class {
         public $my_class_function_variable = 'juice';
         public function my_class_function() {
      
         }
      }
      $class_instance = new my_class();
      
      function display_juice() {
           echo my_class->$my_class_function_variable;
      }
      
      display_juice();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        • 2014-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多