避免每次都开始新课程

时间:2014-09-06 14:39:25

标签: php oop frameworks autoload

我正在编写自己的PHP框架,以了解这些框架的工作原理。现在我的项目中有以下结构:

  • 项目
    • 应用
      • config(config.php)
      • controllers(songs.php)
      • 扩展(作曲家包的扩展)
      • libraries(application.php,controller.php,model.php,view.php)
      • models(songsmodel.php)
      • 存储(缓存)
      • views(_templates,songs folder => index.php)
    • 公共
      • CSS
      • JS​​
      • IMG
    • 供应商(作曲家包)
    • 的.htaccess
    • composer.json
    • 的index.php

所以现在我正在使用composer的自动生成文件自动加载我正在使用的软件包。 我如何制作它以便每次我想使用它时都不必创建一个新的包实例?现在使用我通过作曲家获得的一个包我正在这样做 - 这只是一个例子,我永远不会通过我的控制器输出任何“html”:

/**
* Home Controller
*/

class Home extends Controller
{
    public function index()
    {
        $mail = new PHPMailer();

        $mail->addAddress('joe@example.net', 'Joe User');

        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

        if(!$mail->send()) {
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
        } else {
            echo 'Message has been sent';
        }
..

我想要像Laravel一样,在那里你可以写一些类似于没有写“新”的东西来开始上课:

$user = Sentry::authenticate($credentials, false);

或:

if (Hash::check('secret', $hashedPassword))
{
    // The passwords match...
}

它是一个“Facades”类或类似的东西我需要编码吗?我不确定我怎么也找不到任何知识来源。

1 个答案:

答案 0 :(得分:0)

我的建议就像是。

public static function getInstance(){
    if(!isset(self::$_instance)){
        self::$_instance = new thisClass();
        echo "instantiated";
    }
    return self::$_instance;
}

所以当你调用thisClass :: getInstance()时;你想要的次数只会实例化1个对象。 通过测试只会有一个实例化的消息。