2014-07-10 15 views
10

C dilinde bir PHP uzantısı yazıyorum ve bir ad alanında oluşturduğum sınıfları, işlevleri ve değişkenleri koymak istiyorum. İsim alanları ile ilgili uzantı belgelerinde hiçbir şey bulamadım. Açık olmak gerekirse,PHP uzatma sınıflarını, fonksiyonlarını vb. Bir isim alanına koyabilir miyim?

eşdeğerini istiyorum. Daha spesifik olarak, Zend C API'sinde C dilinde yazdığım bir sınıfa veya fonksiyona bir PHP ad alanı atamamı sağlayan bir işlev veya makroyu arıyorum. Bu mümkün mü?

+0

Evet, bu çok iyi, normalde kullanmıyorum çünkü dosya başına 1 sınıfa bağlıyım. Açıkçası, diğer yorumunuzu gördüğümüzü hatırlıyorum, başlığı daha da görünür hale getirmek için eklemek isteyebilirsiniz. – ArtisticPhoenix

+0

@ArtisiticPhoenix Soruyu anladığınızı sanmıyorum. Bunu PHP'de yapabileceğimi biliyorum. Bir C uzatmada * nasıl * yapılacağını bilmek istiyorum. – murgatroid99

+0

@ murgatroid99 Şimdi yapıyorum özür dilerim. C için bir etiket var mı? ekleyerek bu da yardımcı olabilir. – ArtisticPhoenix

cevap

6

Ad alanına bir sınıf koymak çok basittir. normalde

zend_class_entry ce; 
INIT_CLASS_ENTRY(ce, "MyClass", my_class_methods); 

sahip bir sınıf başlatmak istiyorum Nerede yerine ad yöntem bildirimleri veya my_class_methods dizinin üyeleri değil ihtiyacını dahil edilecek gelmez

INIT_CLASS_ENTRY(ce, "MyNamespace\\MyClass", my_class_methods); 

olarak ikinci satır yazmak bunları sınıfla düzgün bir şekilde eşleştirmek.

+0

Soruyu cevaplamak için tekrar aradığınız için teşekkür ederiz. Eminim bu cevabı bulmak için beni çoktan kurtardın. – ksclarke

7

PHP uzantılarında Namespaces kullanmak için, temel olarak sınıfın veya işlev adının önüne bir önek koymanız yeterlidir.

Gerçekten bir PHP internals geliştiricisi değilim, bu yüzden bu özelliklerin bana nasıl çalıştığını tamamen açıklamıyorum, maalesef bu konuda bulabildiğim çok az bilgi var. Bu, aşağıdaki makaleyi bulabildiğim en iyisidir.

Ancak, öyle görünüyor ki bu makale Zend motoru/PHP iç elemanlar işlevini kayıt sırasında, sen "myNS\\MyFunc" gibi bunu yapmasını, gibi görünüyor doğru çözümü, ima ve myNS tanımlanan dan o zaman erişilebilir olmalıdır Orada. Bununla birkaç farklı varyasyonu deneyebilirim ve bunun ne kadar uzağa gittiğini görüyorum.

En iyi seçeneğiniz, Freenode üzerindeki # php-internals (bir davet alabilirsiniz) veya PHP Postalama listesine sormak olacaktır. Bir çözüm bulmayı başarırsanız, Internet'in bunun nasıl gerçekleştirileceğine dair iyi bir makaleye ihtiyacı var gibi görünmektedir. http://www.php-cpp.com/documentation/namespaces

bir ad

Kaynak, bir sınıf veya işlev öneki başka bir şey değildir. Sınıflarınızın veya işlevlerin belirli bir ad alanında görünmesini istiyorsanız, sınıf veya işlev adına bir önek eklemeniz yeterlidir.

Güncelleme: Daha fazla olmayı denemek için cevabımı güncelledim açık. Çok uzun sürdüğü için özür dilerim, ilk başta telefonumdan geri döndüğüm ve orijinal yorumunuza cevap verdiğim her yolculukta, telefonumdan cevapladım, ama yorumlardan SO ile ilgili bir bildirim alana kadar gerçekten unutmuşum. Özür dilerim.

+0

Sadece C kullanarak nasıl yapılacağına dair bir açıklama/örnek verebilir misiniz? Bu bağlantıdaki kodu C API'sine nasıl çevireceğime emin değilim. – murgatroid99

+0

Bu, soruma hiç cevap vermiyor. Eklenti kodumun büyük bir yeniden yazılmasını gerektiren bir dilde ek bir kitaplık kullanmayı önerir. Ve cevap bu kütüphaneyi kullanarak ne istediğimi nasıl elde edeceğimi bile açıklamıyor. – murgatroid99

+0

Bu gerçekten doğru olabilir… Sanırım isim alanını ve ters eğik çizgiyi, tanımladığınız işlev/sınıf/ismin içine koyduğunuzu söylüyorsunuz? Ancak, normal PHP uzantıları için geçerli olduğundan emin değilim. – duskwuff

İlgili konular