PHP sınıflarını genişletme

5 Cevap

Java sınıfları uzanan zaman, sınıf adı belirsizlik ithalat tablolara nitelikli paket isimleri kullanımı ile önlenir.

Örneğin: benim denetleyicisi Bahar'ın MultiActionController uzatmak istiyorum Say - Ben standart Bahar paketinden aynı ithal edeceğiz. Bu aynı zamanda onların paketleri MultiActionController ithal değil çünkü, Ahmet'in veya Perry'nin MultiActionController uzanan önlüyor.

Benzer şekilde PHP, biz MultiActionController denir hepsi 10 farklı kütüphane klasörleri, 10 sınıfları var söylüyorlar.

Ben yazarken:

class MyController extends MultiActionController {
    function __construct() {
        parent::__construct();
    }
}

Nasıl PHP söyleyebilirim ki MultiActionController dan (hangi klasör itibaren), genişletmek için?

5 Cevap

Aynı isimde çok sayıda sınıfları olması, bir gün veya başka bazı sorunlara neden olur: Bir komut dosyası yürütme sırasında aynı ada sahip iki sınıfları dahil edilemez - Size bir Ölümcül Hata alırsınız.

Genellikle PHP, yaptıklarından (before PHP 5.3 and namespaces, at least) sınıf adına kütüphane ve / veya "paket" adını eklemektir.

Örneğin, bir sınıf adını MyLibrary_Package_MultiActionController, ve OtherLib_Blah_MultiActionController adlı başka bir olabilir.


Then, what's generally done is using that class name to "map" it to directories and files, replacing the '_' by '/', and adding .php at the end of the last level -- this being often done using the autoloading feature of PHP, to avoid having to write an enormous amount of require directives.

Örneğin, adlı bir sınıf MyLibrary_Package_MultiActionController MyLibrary/Package/MultiActionController.php saklanmalıdır.


As a sidenote : you used the tag "php4", in your question... If you are actually using PHP 4, you should not forget that it's old, not maintained anymore (Not even for security-related problems), and that PHP 5 is really the way to go !

Aslında, PHP 4 ile nesne yönelimli programlama, hakkında çok yapmak mümkün olmayacaktır; PHP 4'te nesne yönelimli şeyler gerçekten temel ...

Diğer OO-ilgili şeylerden (Stuff such as autoloading, which I wrote about a couple of paragraph earlier didn't exists in PHP 4 -- same for public / private / protected, ve daha ...)

Bu dahil hangisinin bağlıdır. PHP aynı isimde bir sınıf yeniden tanımlamaya izin, yani sadece sınıf tanımı (dosya adları ve yazılım düzeni sığdırmak için değişim) Yukarıda dahil değildir:

include('../includes/Spring/MultiActionController.php');

class MyController extends MultiActionController {
   ....
}

PHP include deyimi ile birlikte sınıfını uzatacaktır.

Örneğin, dosya bar.php bildirilen bir sınıf foo olduğunu söylüyor:

class Foo {
    // methods and fields
}

Sonra başka bir yuh:

include 'bar.php';
class Aardvark extends Foo {
    // this class will extend the class Foo in file bar.php
} 

Bir banal include() deyimi ile, sınıfını tutan dosyayı eklemek:

include('lib/controllers/MultiAction.php');

Sonra uzatabilirsiniz!

Ben namaspaces kullanmak istiyorum

namespace package_products_multicontroller {
include("/packages/products/multicontroller.php");
}

class MyController extends package_products_multicontroller\MultiActionController {
    function __construct() {
        parent::__construct();
    }
}