Ben bir PHP işlevi veya yöntemin içine kodu içerebilir?

5 Cevap

Ne bağlı olarak - - (dahil aracılığıyla bu uygulama dosyası bulunuyor içerir) Ben idam alır ve "jenerik" fonksiyonu bir tür yapmak istiyorum. Yani, örneğin, ben tam olarak bir işlev ve bu işlev için tam 20 prosedür dosyalar olabilir. Prosedür dosyaları vb do_this_procedure.php, do_that_procedure.php gibi görünebilir

Ben PHP için yeni gibi ben bunu denemek ve sadece o inşaat "inanmak" önce, PHP ile ya da değil gayet wether PHP expertes dan bilmek istiyorum, ve gerçekte bir çok şey yanlış gidebilir. Peki siz ne düşünüyorsunuz? Şu anda bunun yürütülmesi için derlenmiş önce doğru o yere sadece bir kod ekleme olarak eklemek düşünüyorum.

5 Cevap

include deyimi belgeleri:

Çağıran dosyanın içinde bir işlev içinde meydana eklerseniz bu işlev içinde tanımlanmış sanki, o denilen dosyasında bulunan tüm kod davranacaktır. Yani, o fonksiyonun değişken kapsamını takip edecek. Bu kuralın bir istisnası oluşur dahil edilmeden önce çözümleyici tarafından değerlendirilir sihirli sabitler vardır.

Yani evet, bir işlevin içinde include aramak ve işlevinin vücut tanımlamak için kullanabilirsiniz. Hatta işlevin her çağrısı ile değişir içeren dosya olabilir. Olumsuz dahil işlevin her çağrısı ile değerlendirilecektir olacaktır; fonksiyonu defalarca denir, eğer ciddi performansı etkileyebilir.

Eğer başarmak için çalışıyoruz tam olarak ne bağlı olarak, alternatif bir çalışma sizi construct functions sağlayan fonksiyonel bir programlama paradigma, takip etmektir. PHP 5.3 önce, bu çirkin, bu yüzden en azından PHP 5.3 gerektirir sürece ben bunu tavsiye etmem.

Siz de bu deneyebilirsiniz:

PHP Tokenizer.

//from external script:

<?php
  var_dump(token_get_all(file_get_contents('myscript.php')));
?>

Böyle bir dosya da dahil olmak üzere çalışma yapılacaktır, ben inanıyorum. PHP gerektiren / include fonksiyonunu çarptığında temelde, bağımsız bir biri olarak bu dosyayı eval edecektir.

Ben işlevine geçirilen değişkenler dahil dosyasında kullanılabilir olacak mı emin değilim, ama onları cezası çalışması gerektiğini, küresel-ing.

@ Outis kafasına çivi vurdu, ancak alternatif bir yaklaşım sınıf yöntemi içerecek ve çağırmak için bir sınıf statik bir yöntem olarak işlev oluşturmak ve (vb, spl_autoload_register üzerinden) autoloader oluşturmak olacaktır zamanında.

Zaten bir OO yaklaşımı kullandığınız sürece Sonra tekrar, bu gerçekten sana bir şey almazdım.

outis ancak bu kodu uygulamak için çok çirkin ve dağınık yol olarak bana grevler, doğrudur. Neden sadece bir işlevin farklı beyanları ile farklı dosya yok including the function declaration.

Ben geri gitmek ve daha uzun 20 satır dışında herhangi bir işlevi refactor pratik olup olmadığını göreceksiniz başparmak genel bir kural olarak - Fonksiyonlar mümkün olduğunca kısa olmalıdır. Bunu akılda tutarak, nerede ayrı dosyadan bir fonksiyonun gövdesinin dahil olmak üzere yararı var?

C.