Başka bir sınıf içinde bir PHP sınıfı oluşturmak için izin verilir?

5 Cevap php

Başka bir sınıf içinde bir sınıf oluşturmak için izin olup olmadığını merak ediyordum.

Ya da, ben dışarıda oluşturmak zorunda ve daha sonra yapıcı aracılığıyla bunu geçmek mi? Ama sonra ben bunu gerekir eğer bilmeden yaratmış olurdu.

Örnek (bir veritabanı sınıfı):

class some{

if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db

5 Cevap

Siz başka bir sınıfta bir sınıf tanımlayabilirsiniz olamaz. Sen sınıf dışında diğer sınıflarla dosyaları içermelidir. Senin durumunda, bu sana iki üst düzey sınıfları db ve some verecektir. Şimdi kurucusunda some Eğer db bir örneğini oluşturmak için karar verebilirsiniz. Örneğin:

include SITE_ROOT . 'applicatie/' . 'db.class.php';

class some {

    public __construct() {
        if (...) {
            $this->db = new db;
        }
    }

}

Ben sadece başka bir sınıf tanımı içinde dinamik bir sınıf tanımı yüklemek mümkün olduğunu işaret etmek istedim.

Lukas dahil dosyasında tanımlanan her fonksiyonları ve sınıfları küresel bir kapsama sahip olacağından, dinamik) (bunları biz başka bir sınıf içinde bir sınıf tanımlamak değil, ama biz dahil () ya da ihtiyaç olabilir hakkıdır. Dinamik bir sınıf veya işlevi yüklemek gerekiyorsa, sadece sınıf 'işlevlerinden biri dosyaları içerir. Bunu yapabilirsiniz:

function some()
{
    require('db.php');
    $db = new Db();
    ...
}

http://php.net/manual/en/function.include.php

Evet, öyle possible.

O bir sınıf içinde bir sınıf oluşturmak 'mümkün olduğunu söyleyerek insanlar bir sınıf içinde bir nesne / örneğini oluşturmak mümkün olduğu anlamına görünüyor. Ben nasıl olacağını başka bir sınıf tanımı içinde gerçek bir sınıf tanımı, bir örnek görmedim:

class myClass{

    class myNestedClass{

    }

}

/* THIS IS NOT ALLOWED AND SO IT WON'T WORK */

Soruydu beri 'o create bir sınıf inside başka bir sınıf için mümkün olan', ben şimdi sadece mümkün değildir varsayabiliriz.

Hayır, bu mümkün değildir. Yerleştirme sınıflar ve toplanmasını nesneler diffrent mekanizmaları vardır. Yerleştirme sınıflar araçları nesting class names, aslında. B sınıfı iç içe A sınıfı "B \ A" (?) Adında olacaktır. Eğer yuva sınıf adları (ve diğer bazı isimler) boşluklarında can v5.3 itibaren.