Require_once fonksiyonunu yeniden adlandırmak için bir strateji?

4 Cevap

Aksine sadece ithalat adında yeni bir fonksiyon yazmak yerine () ben daha iyi bir çözüm varsa bilmek isterim. Aksi require_once () sadece, orada herhangi bir "küresel" değişkeni için kötü olan ithalat kapsamına dahil olacaktır.

Benim ithalat () fonksiyonu farklı Require_oncenin daha çalışmak, ama aynı amaca (gelişmiş kullanılabilirlik) vermektedir olacaktır.

4 Cevap

Benim gut İçgüdü görüşü: Nah. Bunu yapmayın.

  • Bir dil işlevleri yerli belirledi. Neden hiç katma değere sahip özel bir işlevi tanıtmak.

  • I require_once() tarafından korkutulma neden yoktur sanmıyorum.

  • Ben küresellerle kullanarak büyük bir şey değil, size katılıyorum, ama bir makyaj işlev adı için bunları kullanarak olasılığını ödün gitmek için iyi bir yol değildir.

Yolları hakkında endişeleriniz ne varsa, o zaman neden doğru yolu döndüren bir import() işlev yazmak değil. Şöyle:

require_once import("operations.php");

Sadece - gözlerimde o kadar korkunç değil - dezavantajı sadece aksi require_once kilitlenmesine, ithalat her zaman something doğru yolunu döndürür emin olmak zorunda olmasıdır. Bunun dışında, bu, aynı rahatlık var istediğiniz gibi yolları kontrol sağlar, fakat size esneklik açısından hiçbir maliyeti yok.

Ben sizin ve takım hakkında bilmiyorum ama ben / gerektiren tarafından "korkutulma" Bir PHP geliştiricisi görmediğin dahil - bu sadece yolu dil eserler bulunuyor.

Eğer böyle şeyler korkutulma ediyorsanız belki de başka bir dil kullanıyor olmalıdır.

Ve ne bir Maintainence kabus gibi sesler teklif ediyorsun.

Muhtemelen __autoload() kullanarak sonra konum ne benzer bir şey alabilir. Sonra sadece require bunu ing olmadan, istediğiniz ne olursa olsun sınıf kullanabilir ve çok uzun, dosya include_path olduğu gibi sorunsuz yüklenecektir.

(Bu tabii eklemek için çalışıyoruz dosyanın içinde bir sınıfı vardır, ve sınıf ve dosya bazı kuralına göre adlandırılmaktadır olduğunu varsayar. Muhtemelen bu not aslında durum.)

Bu Zend-ve Armut tarzı adlandırma kuralları ile çalışır oldukça standart bir robotu, olduğunu:

<?php
/**
 * Load (include the file of) a given PHP class.
 *
 * @param string $class The name of the class to load.
 *
 * @return void
 */

function __autoload($class)
{
    $files = array(
        $class . '.php',
        str_replace('_', '/', $class) . '.php',
    );
    foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $base_path) {
        foreach ($files as $file) {
            $path = "$base_path/$file";
            if (file_exists($path) && is_readable($path)) {
                include_once $path;
                $finalPath = $path;
            }
        }
    }
    if (isset($finalPath)) {
        return;
    } else {
        die("Unable to load class '$class'.");
    }
}
?>

Sen bir ithalat fonksiyonu oluşturmak ve bir sınıfa ekleyerek require aramaların sayısını azaltmak olabilir. Böylece bir kez çerçeveyi gerektiren sonra, kullanıcılar daha sonra diğer çerçeve sınıfları dahil olmak üzere ithalat işlevini kullanabilirsiniz. Zekâ için:

index.php:

require_once 'MyFramework.php';
MyFramework::import('Path/To/File.php');

MyFramework.php

class MyFramework {
 static function import($path) {
   // code to include/import the path
 }   
}

Başka bir seçenek otomatik olarak require çerçevesi sınıfları PHP'nin auto_load semantik kullanmak olacaktır:

http://php.net/manual/en/language.oop5.autoload.php

Günün sonunda gerçekten yerini alamaz rağmen gerektiren / PHP kaynak düzenleme kısa açıklamalar içerir.