Ben*_*Ben 7 php oop class object
我一直在努力用PHP转移到OOP.我在php.net上阅读了解释,但我希望我能在这里得到一些具体的答案.
我试图创建以下示例来说明我的问题.假设我有"数据库","产品"和"用户"类,我想在用户有权访问时显示产品.
所以我调用"Products"类"showProducts()"函数,该函数又创建"User"类的实例,该类创建"Database"对象的实例并检查用户访问级别.
如果用户具有访问权限,则"showProducts()"函数将创建"Database"对象的另一个实例,并查询数据库.
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query( //pass in query to check access )
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query( //pass in query to get products )
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有人可以用正确的方式说明如何做到这一点.
我想有一些控制器类,它创建一个"数据库"对象,可供所有需要访问它的类使用,而不必创建"Database"对象的多个实例.我希望与users类相同,因此有一个$ users对象,所有类都可以访问,而不必每次我需要在"User"类中使用某些东西时创建一个新对象.
如果我的问题不明确,我道歉,并提前感谢任何回复!!
感谢大家的回复!
otp*_*ran 12
将表单过程转换为面向对象编程时,您应该掌握更多,然后才能构建类.OOP不是在编写类,而是在遵循OOP中的最佳实践,原则和模式.
您不应该在另一个内部实例化新对象,您应该提供User对象,User所依赖的Database对象,构造函数或setter方法.这称为依赖注入.目标是通过构造函数或setter方法将对象赋予需要它们的类.它们应该从该类外部实现,因此更容易配置类.在构建类时,您希望很容易看到该类具有哪些依赖项.您可以在此处阅读有关控制反转原理:IoC
那么你的代码看起来像这样:
<?php
// User object that depends on Database object, and expects it in constructor.
class User
{
protected $database;
public function __construct($database)
{
$this->database = $database;
}
// -- SNIP --
}
?>
Run Code Online (Sandbox Code Playgroud)
现在使用该用户类,您可以这样做:
<?php
$database = new Database($connParams);
$user = new User($database);
?>
Run Code Online (Sandbox Code Playgroud)
你也可以使用setter方法使用依赖注入来设置依赖关系,但Il让你自己谷歌:)
多数民众赞成,读到有关控制反转原理,以及依赖注入和依赖注入容器,这些是管理类的最佳方法.
我已经看到很多PHP代码是"OOP",事实上它们只是使用Classes作为功能名称空间:)所以请大家学习OOP原理和模式.
玩得开心!:)