GitHub'dan mevcut bir sınıfı genişletmeye çalışırken bu sorunla karşılaştım. Kendimi açıklamaya çalışacağım, önce sınıfı olması gerektiği gibi yazacağım, sonra da şimdi olduğu gibi.
Ne düşündüm
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Sonunda ne yaptım
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Görünüşe göre bu hata, isim alanlı bir sınıf döndüren bir yöntem kullandığınızda ve aynı sınıfı başka bir ad alanıyla döndürmeye çalıştığınızda da ortaya çıkıyor. Neyse ki bu çözümü buldum, ancak php 7.2'de bu özelliğin faydasını tam olarak anlamıyorum, benim için mevcut sınıf yöntemlerini ihtiyaç duyduğunuzda yeniden yazmak normaldir, buna girdi parametrelerinin yeniden tanımlanması ve / veya hatta davranış yöntem.
Önceki yaklaşımın bir dezavantajı, IDE'lerin \ sirketim \ CutreApi \ ClassOfVendor () içinde uygulanan yeni yöntemleri tanıyamamasıdır. O yüzden şimdilik bu uygulamaya geçeceğim.
Şu anda yapıldı
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Bu yüzden, "her neyse" yöntemini kullanmaya çalışmak yerine, "getWhatever" adında yeni bir yöntem yazdım. Aslında ikisi de aynı şeyi yapıyor, sadece bir sınıfı geri veriyorlar, ama daha önce anlattığım gibi farklı ad alanları ile.
Umarım bu birine yardımcı olabilir.
function customMethod( ... )
her işlev için başlıkları gönderebilirseniz (yalnızca ilk satır