PHP 依赖关系注入子类



假设我有以下php类:类用户,类文件管理器和类下载器扩展文件管理器

<?php
class user {
  private $name;
  public function __construct($name){
     $this->_name = $name;
  }
  public function getName(){
     return $this->_name;
  }
}
class fileManager {
  protected $user, $list;
  public function __construct($user, $list){
    $this->_user = $user;
    /* IF list is 1 OR 2... */
    $this->_list = $list
    /* for test: */
    echo $this->user->getName(); /* WORKS */
  }
  /* SOME METHODS */
}
class downloader extends fileManager {
  public function download($fileid){
    $this->_fileid = $fileid;
    /* if his username is set, he is logged in */
    if($this->user->getName()!=null){continue();}
  }
}
$user = new user('Jan');
echo $user->getName(); /* = jan */
$fm = new fileManager($user, 1);
$down = new downloader();
$down->download(1); 
/* FATAL ERROR, Call to a member function getName() on a non-object */
?>

因此,jan 已登录,并打开文件管理器。文件管理器从用户类调用 getName,并知道它是 jan。但是,如果 Jan 想要下载文件 1,则下载程序无法识别 Jan。子类不应该从父类继承属性吗?

$down是一个

新对象。 -> 构造函数需要参数。尝试

$user = new user('Jan');
echo $user->getName(); /* = jan */
$fm = new fileManager($user, 1);
$down = new downloader($user, 1);
$down->download(1);

不考虑拼写错误,您必须在实例化下载类时将值传递给构造函数。

class user {
  private $name;
  public function __construct($name){
     $this->_name = $name;
  }
  public function getName(){
     return $this->_name;
  }
}
class fileManager {
  protected $user, $list;
  public function __construct($user, $list){
    $this->_user = $user;
    /* IF list is 1 OR 2... */
    $this->_list = $list;
    /* for test: */
    echo $this->_user->getName(); /* WORKS */
  }
  /* SOME METHODS */
}
class downloader extends fileManager {

  public function download($fileid){
    $this->_fileid = $fileid;
    /* if his username is set, he is logged in */
    if($this->_user->getName()==null)
        return false;
    //download file
  }
}
$user = new user('Jan');
echo $user->getName(); /* = jan */
$fm = new fileManager($user, 1);
$down = new downloader($user, 1);
$down->download(1);

最新更新