Öneki olmadan başka ad alanında tanımlanmış bir PHP işlevini çağırarak

0 Cevap php

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))
    )));

0 Cevap