2011-02-03 21 views
9

Bu kötü bir uygulama mı?PHP - bir fonksiyonun içindeki sınıfları tanımlama

gibi:

function boo(){ 
    require_once("class.moo.php"); 
} 
... 

?

+0

Olası kopyası [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-fonksiyon) – drudge

+0

Bence bunun bir kopyası var. //stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) aslında – greatwolf

cevap

7

Evet kötü bir uygulamadır; no değil. çağıran

Eğer __autoload (veya eşdeğeri) kullanırsanız,:

function someFunc() 
{ 
    include('path/to/UndefinedClassName.php'); 
    //may be require_once, include_once, include, or require 
    //depending on how autoload is written 
    $n = new UndefinedClassName(); 
} 
:

function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

eşdeğerdir

Büyük olasılıkla burada her iki cevap almak için gidiyor ve neden bulunuyor

__autoload'u kullanmamanız durumunda kodunuzdan daha iyi performans elde edersiniz. Ve kodunuzu korumak için, tüm includes kodunuzu, diğer dillerdeki import ifadelerine benzer şekilde koymak daha iyidir.

include('path/to/UndefinedClassName.php'); 
...code... 
function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

Ben tutarlılık öneririz. İşlevlerde include'u sürekli olarak çağırıyorsanız, çok fazla sorun yaşamamış olmalısınız, ancak dosyaların başlangıcında veya autoloads olarak ithalatı seçerim.

3

Bunu önlemek isterim.

Başka geliştirici beklenir, ve bu haliyle, kodunuzun yaşatılabilirlik azaltacaktır değil.

+2

sürece "başka geliştirici ne beklenir değil" Tabii ki diğer geliştirici de aynı şeyi yapıyor ... – zzzzBov

+0

@zzzzBov: Tabii ki "normal" bir geliştiriciyi kastediyorum. Standart olmayan uygulamalar kötü uygulamalardır, IMO. –

+1

Bazı seviyelerde söylediklerinize katılıyorum, ancak hangi standart hakkında konuştuğunuzu ayırt etmek önemlidir. Bir * resmi * standardı yok, sadece diğer programcıların geçmişte kod yazdığı yol var. Bir resmi * standarda en yakın şey, bir sebepten dolayı liberal olan kodlama belirtimi ve sözdizimi. – zzzzBov

1

Bu, sınıf yükleyicilerinin nasıl çalıştığıdır. Bu mutlaka kötü bir uygulama değildir.

işlevin ne bağlıdır ve neden bunu yapıyorlar. autoloading kullanmak daha uygun olabilir.

0

ben bu konuda kötü bir şey görmüyorum bunun nedenlerini varsa.

1

Bu genellikle kötü bir uygulamadır ve kaçınılmalıdır. Bunun yerine bir autoloader kullanmayı düşünmelisiniz.

+0

Başka yerde belirtildiği gibi, temelde otomatik yükleyici nasıl çalışır. – Mchl

+0

Evet, ancak otomatik yükleyici aynı okunabilirlik/sürdürülebilirlik sorunlarına sahip değil. – keithjgrant

İlgili konular