OOP中的变量范围

时间:2018-02-06 07:56:12

标签: php

我的结构中有类:

require_once("classes/config.php");
require_once("classes/database.php");
require_once("classes/template.php");
require_once("classes/route.php");
require_once("classes/user.php");


$config = new config;
$route = new route();
$db = new database ($config['db_host'], $config['db_name'], $config['db_user'], $config['db_pasw']);

课程'模板'使用模板文件。 使用数据库或用户类的正确方法是什么,例如,在模板类中?

它现在如何运作:

global $user; 

但它不是良好的编码习惯,对吧?

4 个答案:

答案 0 :(得分:0)

因此,在User类中,您可以执行类似于面向对象的方式:

class User{
    private $user;

    public function getUser(){
        return $this->user;
    }
}

要让用户加入您的脚本,

$userObj = new User();

$user = $userObj->getUser();

答案 1 :(得分:0)

依赖注入。

将要在模板中呈现的数据收集到将注入模板渲染功能的数据集中,如:

// This can be class or array, as you prefer
$viewData = array(
    'user' => $user,
    'something_else' => ...
);

$template = new Template('id');
$template->render($viewData);

答案 2 :(得分:0)

是的,这不是很好。 您可以在单独的配置类中指定连接变量。 然后,在必要时将其连接到构造函数并使用它。 因此,您的项目中不会有单个全局变量。

这是一个例子。但你必须知道。这是一辆自行车,仅举例来说。但这里没有DI​​(依赖注入):

配置

namespace Model;

class ConfigModel
{
    public $db =   'name_db';
    public $user = 'user_u';
    public $pass = '123456';

    public $protocol = 'https:';
    public $brand = 'MyBrand.com';
    public $salt = 'ougfhdsihgsugsdopgf';

    public $path = __DIR__;
}

DB class

namespace Model;

class DB
{
    protected $host = 'localhost';
    protected $db =   '';
    protected $charset = 'utf8';
    protected $user = '';
    protected $pass = '';

    public function __construct() {

        $config = new ConfigModel();
        $this->db = $config->db;
        $this->user = $config->user;
        $this->pass = $config->pass;


        $dsn = "mysql:host=$this->host;dbname=$this->db;charset=$this->charset";
        $opt = array(
            \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC
        );

        try {
            $this->DBconnect = new \PDO($dsn, $this->user, $this->pass, $opt);
        }
        catch( PDOException $Exception ) {
            echo $Exception->getMessage();
            echo $Exception->getCode();
            if(!empty($Exception->getCode())){
                die('Error');
            }
        }
    }

    public function showAllUser() {
        $db = $this->DBconnect->prepare('SELECT `mail` FROM `users`');
        $db->execute();
        return $db->fetchAll();
    }

}

答案 3 :(得分:0)

我不明白,您是否想要呈现全局用户信息,例如,用户名?我认为使用用户详细信息或登录详细信息的正确方法是使用$ _SESSION,之后使用$ _SESSION ['user']可以在模板中呈现用户详细信息。