Обязательно ли включать / включать в несколько файлов, если они все являются частью одного и того же пространства имен? - PullRequest
0 голосов
/ 30 марта 2012

Я совершенно незнаком с концепцией пространства имен в php.

Ситуация: Несколько файлов в папке, и все они требуют / включают друг друга для своих собственных целей.

Если бы я поместил их всех в одно пространство имен, все равно было бы необходимо, чтобы они требовали / включали друг друга?

Я думал о замене require / include на «use», но кажется странным иметь файл в пространстве имен foo \ bar, чтобы фактически «использовать» foo \ bar ... o_O

PS: Я покрываю все свои базы, задавая вопросы, а также ищу в сети ответы; так что если у вас есть хорошие источники информации / учебники и т.д., пожалуйста, не стесняйтесь поделиться. : D

Спасибо, David

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Это может запутаться со всеми включениями / требованиями. Включенные файлы в один включенный файл также будут включены в первый, без явного вызова. Я бы посоветовал, если вы используете ООП подход, начните с использования магического метода __autoload(). Это избавит вас от множества головных болей в будущем, когда вы включите файл на страницу, которая уже была включена в другое место, работающее на этой странице, и вы получите ошибку сервера 500 из-за этого.

1 голос
/ 30 марта 2012

Если бы я поместил их всех в одно пространство имен, все равно было бы необходимо, чтобы они требовали / включали друг друга?

Например, вы можете создать класс загрузчика (это то, что я всегда делаю, поэтому вы должны включать / требовать их только один раз, и вам нужно только включать / запрашивать класс загрузчика в контроллере),Вот текущий, который я использую:

<code><?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

//include alle classes
include("classes/db.class.php");
include("classes/gastenboek.class.php");
include("classes/gebruiker.class.php");
include("classes/bericht.class.php");

session_start();

$db = new Db();

//require smarty (smarty template engine)
require('plugins/smarty/Smarty.class.php');

$smarty = new Smarty;
$smarty->setCompileDir('smarty_compile');
$smarty->setTemplateDir('templates');

//func to dump var
function dump($var)
{
    //echo ##
    echo '<pre>##';
    //print var
    print_r($var);
    //echo ##
    echo '##
';}

Например, для db.class, например,

<?php
class Db
{
    //Loading Db
    public function __construct()
    {
        //do connect()
        $this->connect();
    }

    //connecting and selecting db
    private function connect()
    {
        $connection = mysql_connect('localhost', 'user', 'pw');

        if(!$connection)
        {
            die("Kan geen verbinding maken: " . mysql_error());
        }

        mysql_select_db("db", $connection);
    }

    public function DBH()
    {
        try 
        {
            $DBH = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pw');
            $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $DBH;
        }

        catch (PDOException $except)
        {
            echo $except->getMessage();
        }
    }

index.php потребуется только это:

include("includes/loader.php");
1 голос
/ 30 марта 2012

Да, они вам нужны, или вы можете использовать psr-0-совместимый автозагрузчик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...