【问题标题】:Is it possible to define a variable so it available to every function within the class是否可以定义一个变量,以便类中的每个函数都可以使用它
【发布时间】:2013-11-15 07:52:37
【问题描述】:

是否可以定义一个变量,以便类中的每个函数都可以使用它...

例如:

class scope {

  private $db = null;

  function __construct($db) {
          $this->db = mysqli_init();
          return $this->db;
  }

  function uses_variable {
          $stmt =  $db->stmt_init();
  }

}

但是没有使变量全局化或使用一堆额外的不必要的代码或开销?

编辑

我正在使用类似这样的方式将所有类加载到我的索引中:

class autoloader {
    public static $loader;

    public static function init()
    {
        if(self::$loader == NULL) {
            self::$loader = new self();
        }
        return self::$loader;
    }   

    public function __construct() {
        spl_autoload_register(array(this, 'library'));
        request::request();
        template::render();

    }

    public function library($class) 
    {
        set_include_path(get_include_path() . PATH_SEPARATOR . '/lib');
        spl_autoload_extensions('.class.php');
        spl_autoload($class);
    }


}

当我在 uses_variable 函数中调用变量时,如果我这样做,则会出现错误:

function uses_variable () {
     $stmt =  $this->db->stmt_init();
}

Notice: Undefined property: autoloader::$db,可能值得注意的是函数 user_variable 是在另一个已使用自动加载器加载的类上调用的,我想知道这是否会改变我的项目范围,我仍在学习 ><.>

【问题讨论】:

    标签: php function class variables scope


    【解决方案1】:

    您的示例应该有效。问题是您在uses_variable() 范围内访问$db。请改用$this-&gt;db。

    function uses_variable () {
         $stmt =  $this->db->stmt_init();
    }
    

    如果您有任何问题,应该可以解决您的问题,但我猜它不是您问题中的“复制/粘贴”代码。

    【讨论】:

    • 我正在寻找一种在函数中使用 $db 的方法,通常是 mysqli_stmt_init,我想保留 db = mysqli_init() 还是我遗漏了什么?,$this->db 是否仍然存在相同的值还是会重新附加到 stmt_init ?
    • 你应该测试一下。 $this-&gt;db 将始终具有相同的值或引用。
    • 这不起作用,我有一个错误注意:未定义的属性:parentclass::$db 我使用这个函数的类是由自动加载器和其他函数一起加载的,它抛出的函数error from 在另一个类中被调用,这会导致错误吗?
    • @FatalCleric 您必须更好地解释您要做什么。我们无法猜测您在做什么,您的问题目前是关于基本类结构的。该错误似乎与父类有关,您可能尝试使用parent::$db - 它不适用于self 范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多