Bir PHP nesneleri içinde dosya başvuruları nasıl çalışır?

2 Cevap php

Ben gerektiğinde talep üzerine diğer dosyaları nesneleri yükleyebilirsiniz bir PHP nesne oluşturmak için çalışıyorum. Benim sorunum sınıf tanımı için dosya yere göre dosyaları başvuru yaptığınızda, bu dosyaları bulamıyor olmasıdır. Yani yapı dosyası:

/ Test.php

/ Os / os.php (uzanır kernel)

/ Os / kernel.php

/ Os/libraries/lib1.php

/ Os/libraries/lib2.php

/ Os/libraries/lib3.php

Kernel.php yılında, kütüphaneler 'libraries/lib1.php' olarak başvurulur. Ben dnm.php bir "os" nesnesi oluşturursanız. Lib dosyaları bulunamıyor.

2 Cevap

Sizin sınıfları, include_path için iyi bir adlandırma kuralı kullanın ve spl_autoload kullanın.

Exemple:

Name your classes like this: class Os class Kernel class Libraries_Lib1 ...

Senin yolunu içerir kaydol

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('os/'),
    get_include_path(),
)));
spl_autoload_register("autoload");

Ve bir autoload kullanın:

function autoload($className) {
   $name = implode("/", explode("_", $className));
   require_once(strtolower($name) . ".php");
}

Seni göreli yolun her türlü (yerine sadece bir dosya adı veya mutlak yol) belirtirseniz, PHP $_SERVER['SCRIPT_FILENAME'] (çalıştırıldı ana komut) göre bunu eklemeyi deneyin düşünüyorum, ve bu nedenle tutarsız olsun Sonuçlar.

Siz örneğin, bilirsin her zaman dahil olacak bir dosyada bir yerde mutlak bir yol tanımlayabilirsiniz:

<?php
//e.g. this could be file os/kernel.php
//define absolute path to libraries dir
define('LIBRARY_PATH', dirname(__FILE__) . '/libraries');

Başka bir dosya da dahil olmak üzere zaman ve daha sonra başka bir yerde (kernel.php ve diğerleri) bu kullanın:

<?php
include LIBRARY_PATH . '/lib1.php';