我对php中的命名空间概念是全新的。
情况:一个文件夹中有多个文件,它们都需要/包含彼此以达到各自的目的。
如果我把它们都放在同一个命名空间中,是否还有必要让它们相互要求/包括?
我确实想过用"use"替换require/include,但在名称空间foo''bar中有一个文件实际上"use"foo''bar似乎很奇怪。。。o_o
PS:我通过提问来覆盖我的所有基础,同时也在网上搜索答案;因此,如果你有任何好的信息/教程等来源,请随时分享。:D
谢谢,David
它可能会因为所有包含/要求而变得一团糟。一个包含文件上的包含文件也将包含在第一个文件上,out显式调用它。我建议,如果你使用OOP方法,从__autoload()
魔术方法开始。当你在一个页面上包含了一个文件,而这个文件已经包含在该页面上运行的其他地方,并且因此导致500服务器错误时,这将为你省去很多麻烦
是的,您必须需要它们,或者您可以使用psr-0兼容的自动加载器
如果我把它们都放在同一个命名空间中,是否还有必要让它们相互要求/包括?
例如,您可以创建一个加载器类(这是我一直在做的事情,所以您只需要包含/要求它们一次,并且您只需要在控制器中包含/要求加载器类)。这是我目前使用的
<?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 '##</pre>';
}
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");