php - 在类的方法函数中传递父类静态变量

标签 php oop

我需要在子类的方法中调用的函数中传递父类变量。

请看代码!

class CsBuilder {

     protected static $mysqli = 0;

     private function connect() {
          // make connection
          $mysqli = new mysqli(data);
          self::$mysqli = $mysqli;
     }

     public function initialise() {
          $this->connect();
          // other stuff
     }
}

class App extends CsBuilder {

     public function test() {

          // parent::$mysqli is accessable here!

          function innerFuntion() {
               $query = 'some query';
               // parent::$mysqli->query($query);
               // how to access parent::$mysqli here?
          }

          innerFuntion(); 
     }
}

$builder = new CsBuilder();
$builder->initialise();

$app = new App();
$app->test();

出现以下错误:

PHP Fatal error:  Class 'parent' not found...

有什么想法吗?

谢谢

最佳答案

您正在尝试使用其范围之外的变量。检查 PHP 手册中的第二个示例:http://php.net/manual/en/language.variables.scope.php

这里是固定码,在线试一下:http://sandbox.onlinephpfunctions.com/code/80ce967c0b499ce026fbc5d92209c9b8c8cd6323

这是一个变化:

public function test() {

  // parent::$mysqli is accessable here!

  function innerFuntion($db) {
    var_dump($db);
  };

  innerFuntion(parent::$mysqli); // pass it to the function
}

警告:像您一样在类方法中使用函数是一种代码味道。考虑其他方法:

使用 anonymous functions 进行光重构

通过这种方式,您将确保您的函数类似于宏,将在某些循环中使用

public function test() {

  // parent::$mysqli is accessable here!
  $db = parent::$mysqli

  $innerFuntion = function () use ($db) {
    var_dump($db);
  };

  $innerFuntion();
}

正确的方法:提取法

innerFuntion 提取到私有(private)方法中,因此它不会弄乱对象的公共(public) API,但会共享对象的封装状态,并且可以直接在 test 方法中使用。

class App extends CsBuilder {

  public function test() {
    $this->innerFuntion('a', 'b');
  }

  private function innerFuntion(arg1, arg2) {
    $query = 'some query';
    parent::$mysqli->query($query);
  }
}

关于php - 在类的方法函数中传递父类静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481703/

相关文章:

javascript - 哪些技术可用于在 JavaScript 中定义一个类,它们的取舍是什么?

c++ - 是否可以使用枚举来访问数组?

oop - 具有抽象类型组件的 Fortran 派生类型

javascript - 防止对 php 的垃圾 XMLHTTP 请求

c++ - 如何将此公式拆分为 C++ 中的函数?

java - IoC 容器是单例还是静态的?

php - "Illegal string offset"对象属性数组警告?

php - PHP 和 JavaScript 中的变量。我需要基本理解方面的帮助。

php - Magento 网站因移动而无法正常工作

php - 使用 Phing 和 SVN 的生产和开发环境