2013-02-10 88 views
1

可能被问了很多次,但我很头痛。将mysqli传递给功能使用类

我有以下类来管理MySQL数据库。

class blog {   
    function show ($mysqli) { 
    // Code working on $mysqli here 
    } 
} 

因为我会在很多功能使用$ mysqli的这个类我读,我可以为了使$ mysqli的变量传递给类,并使用它的每个函数内,所以我可以做创建构造函数内例如:

$blog = new blog($mysqli); 
$blog -> show(); 

这可能吗?

回答

3

这被称为Dependency injection

只需使用一个字段$mysqli在你的类和构造函数初始化它,使用它通过$this->mysqli

class blog { 
    private $mysqli; 

    function __construct(mysqli $mysqli) { 
     $this->mysqli = $mysqli; 
    } 

    function show() { 
     // Code working on $this->mysqli here 
    } 
} 
+0

这意味着我将不得不写入$这 - > mysqli而不是$ mysqli所有的时间,是吗?如果是这样,有什么办法可以避免它? – wiredmark 2013-02-10 23:18:12

+1

是的,在你的课堂上,你将不得不使用'$ this-> mysqli'来访问该字段。你无法避免它。 – tmuguet 2013-02-10 23:19:22

+0

谢谢,考虑一下,我的最后一个是一个相当愚蠢的问题。我将不得不只写一次。万分感谢。 – wiredmark 2013-02-10 23:19:56

1

将其存储在类,会是这样的:

class blog { 
    private $mysqli; 
    function __construct($dbi) { 
     $this->mysqli = $dbi; 
    }   
    function show() { 
    $this->mysqli->query(); //example usage 
    // Code working on $mysqli here 
    } 
} 

然后在你的代码中使用该类:

$blog = new blog($mysqli); 
$blog->show();