PHP OOP问题,附带一个示例

fun*_*err 1 php oop class

我知道有一些关于此问题的问题,但我需要一个更"具体"的例子
和解决方案.

这是我的例子:
databse.class.php

class db{ 
   public function connect($conStr){...} 
} 
Run Code Online (Sandbox Code Playgroud)

func.class.php

func class{ 
   public insert_song(){ 
      //ineed to use the conenct method from database 
      //then I would INERT INTO... 
   } 
}
Run Code Online (Sandbox Code Playgroud)

问题:
1)我应该在func类中要求或扩展db类吗?
2)如果我需要,db类函数的范围是否仍然存在?(假设我有一个私有变量,可以从外面访问吗?)

She*_*ock 5

  • 不,您不应该要求或扩展数据库类.
  • 不,私有变量或方法永远不会在课外获得.受保护的变量仅适用于子类,公共变量是... public.

您可能需要在配置中的某个位置存放数据库类的文件,因此您可以随时随地实例化数据库类.但是,因为您可能只需要一个数据库对象实例,所以您可以在配置中实例化它并使用依赖注入传递它.

这基本上意味着您将数据库对象传递给需要其他对象的其他对象.处理数据库对象的常用方法是使用构造函数注入,尽管setter注入也可以.

你做的是类似的事情:

// config:
$db = new Database;
$db->setConnectionValues();

$fooClass = new Foo($db);
$fooClass->insertSomething();

// fooClass:
class Foo
{
    private $db;

    public function __construct(Database $db)
    {
        $this->db = $db;
    }

    public function insertSomething()
    {
        $this->db->query("INSERT");
    }
}
Run Code Online (Sandbox Code Playgroud)

这解决了大多数依赖性问题.