Bildiğim kadarıyla söyleyebilirim, biz PHP Namespacing tek nedeni aynı adı diğerleri sınıfları ile çatışan sınıfların (+ fonksiyonlar ve sabitler) sorunu düzeltmek için.
Sorun olduğunu çoğu çerçeveler kurulum onların autoload ve filesystem hierarchy sınıfların isimleri yansıtacak. Ve hiç kimse aslında () s gerektiren veya artık () s dosyaları içerir.
So how does namespacing help this any? sınıf Ya adının off dayanır yüklenir:
new Zend_Db_Table_Rowset_Abstract;
ya da kapalı o isim bulunuyor
new Zend\Db\Table\Rowset\Abstract;
Ben sadece bu isimde bir sınıf yaratmak için güçlü olmak ile şaşırıp iki şekilde de.
/var/www/public/Zend/Db/Table/Rowset/Abstract.php
UPDATE I'm not sure I'm getting the point across.
Her ikisi de aynı ad iddia beri ben onlara aynı class Zend\Db\Table\Rowset\Abstract
ile iki dosya oluşturulmuş olsa bile ben yine de onları bir arada kullanabilirsiniz olamazdı. Ben zaten ne olduğunu kendi ad isimlerini değiştirmek olurdu!
Bu ad alanları için tek kullanım fonksiyon isimleri olduğunu inanıyoruz beni bırakır. Şimdi nihayet üç fonksiyonları hepsi aynı şeyi adlandırılmış olabilir!
Or wait, I forgot you can't do that either, her ad öneki gerektirir çünkü! Strong>
a\myfunction();
b\myfunction();
c\myfunction();
Ircmaxell örneğini alarak:
$model = new \Application\Model\User;
$controller = new \Application\Controller\User;
Nasıl bu olmadan daha mı farklı?
$model = new Application_Model_User;
$controller = new Application_Controller_User;
Bu da düzgün bir sondaj özelliktir - ama gerçekten bizim için ne yapıyor?
use \Application\Model\User as UserModel;
use \Application\Controller\User as UserController;
$foo = new UserModel;
$bar = new UserController;
Eğer o dönem için bir ad ayarı var çünkü sen şimdi 'UserModel' adında bir sınıf var olamaz. Ayrıca still aynı takma ad altında adında iki sınıf olamaz.
Ben iyi bir şey uzun Zend_Db_Table_Rowset_Abstract
adlandırabilirsiniz olduğunu tahmin
use Zend_Db_Table_Rowset_Abstract as RowAbstract;
olmayan sınıf "RowAbstract" tanımlanmış ve sistemde nereden geldiğini hakkında geliştirici karışıklığa yol açar.