Eğer, bir ad bir işlev tanımladığınızda
namespace foo {
function bar() { echo "foo!\n"; }
class MyClass { }
}
başka bir (veya global) ad onu ararken ad belirtmek gerekir:
bar(); // call karşı undefined function \bar()
foo\bar(); // ok
Sınıflar ile istihdam etkin geçerli bir ad alanına sınıf almak için deyimi "kullanmak" [Edit: Ben sınıfları almak için "fan kullanabilirsiniz" diye düşündüm, ama görünüşe göre değil.]
use foo\MyClass as MyClass;
new MyClass(); // ok, instantiates foo\MyClass
ancak bu fonksiyonları çalışmaz [ve orada kaç verilen hantal olurdu]:
use foo\bar as bar;
bar(); // call karşı undefined function \bar()
Siz yazın önek kısa yapmak için ad diğer ad olabilir,
use foo as f; // more useful if "foo" were much longer or nested
f\bar(); // ok
ama tamamen öneki kaldırmak için herhangi bir yolu var mı?
Arka plan: Ben fabrika fonksiyonları bir çok tanımlar hamcrest eşleşen kütüphanede üzerinde çalışıyorum, ve birçoğu iç içe olmak için tasarlanmıştır. Ad alanı öneki olması gerçekten ifadelerin okunabilirliği öldürür. Karşılaştırmak
assertThat($names,
is(anArray(
equalTo('Alice'),
startsWith('Bob'),
anything(),
hasLength(atLeast(12))
)));
karşı
use Hamcrest as h;
h\assertThat($names,
h\is(h\anArray(
h\equalTo('Alice'),
h\startsWith('Bob'),
h\anything(),
h\hasLength(h\atLeast(12))
)));