首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类的方法函数中传递父类静态变量

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

Stack Overflow用户
提问于 2018-01-27 23:39:49
回答 1查看 128关注 0票数 3

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

请看代码!

代码语言:javascript
复制
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();

我发现了以下错误:

代码语言:javascript
复制
PHP Fatal error:  Class 'parent' not found...

有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-27 23:50:49

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

下面是一个固定的代码,在线试用一下:http://sandbox.onlinephpfunctions.com/code/80ce967c0b499ce026fbc5d92209c9b8c8cd6323

这是一个变化:

代码语言:javascript
复制
public function test() {

  // parent::$mysqli is accessable here!

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

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

警告:像您这样在类方法中使用函数是一种代码嗅觉。考虑采取其他办法:

匿名函数进行光重构

通过这种方式,您将确保您的函数类似于宏,它将用于

代码语言:javascript
复制
public function test() {

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

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

  $innerFuntion();
}

正确的方法:提取方法

innerFuntion提取到私有方法中,这样它不会破坏对象的公共API,而是将共享对象的封装状态,并且在test方法中使用非常简单。

代码语言:javascript
复制
class App extends CsBuilder {

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

  private function innerFuntion(arg1, arg2) {
    $query = 'some query';
    parent::$mysqli->query($query);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48481703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档