2010-12-11 21 views
4

クラスの中からクラスを呼び出す方法があるのだろうかと思っていました。たとえば、以下のようになります。PHP:ネストされたクラス

$class->subclass->func(); 

ご協力いただければ幸いです。

+0

あなたがクラスを呼び出すことはありません。またはクラスメソッド。あなたはオブジェクトメソッドを呼び出します。あなたの構文は正しいです。 – Rudie

+1

は静的な(http://php.net/manual/en/language.oop5.static.php)メソッドはもちろん、オブジェクトインスタンスではなくクラス名で呼び出される* 'ClassName :: MethodCall()' – zanlok

+0

も参照してください。http://stackoverflow.com/questions/1548286/can-you-have-nested-classes-in-php –

答えて

4

は、このにlookseeを与える:How to do a PHP nested class or nested methods?

+0

ありがとう、本当に助かりました。 – lolraccoon

+11

うわー、誰もネストされたクラスが何であるか知りませんか?これらの質問のどちらもネストされたクラスとは関係ありません。 –

+0

私はBTに同意します。いいえ! PHPはネストされたクラス(http://stackoverflow.com/questions/1548286/can-you-have-nested-classes-in-php)をサポートしていません。しかし、この回答が提案するものを含め、あなたが望むものを達成するための機能的な方法がありますが、人々がそれを特に認識する必要があるように感じます。 –

0

は、サブクラスは、通常のクラスであるので、あなたは、あなたが何かを呼び出す方法それを呼び出す:あなたのコード例については

$subclass = new SubClass(); 

$class->subclass->func(); 

私のように見えるのは、あなたが何らかのタイプのオブジェクトを持っているということです別のオブジェクト(おそらく別のタイプのもの)を含む "$ subclass"というオペレータです。そのクラスプロパティには、あなたが呼んでいるfunc()というパブリックメソッドがあります。

あなたが混乱するかもしれないので、ここであなたの意味を明確にする必要があります。 「サブクラス」という言葉は特別な意味を持っています。つまり、クラスを定義し、そのクラスをテンプレートとして使用して、より多くの機能を持つ類似のクラスを作成することを意味します。

class ParentClass { 
    public function sayHello() { 
    echo "Hello!"; 
    } 
} 

は、あなたがParentClassが行うすべてを行い、別のクラスを望んでいたとしましょう、だけでなく、さよならは言います:

たとえば、あなたがこのようになりますParentClassと呼ばれる親クラスを、持っているとしましょう。あなたはParentClass(すなわち継承)「拡張」でChildClassクラスを作成することができます。あなたは「すべて」を取得、

class ChildClass extends ParentClass { 
    public function sayGoodbye() { 
    echo "Goodbye!"; 
    } 
} 

するとあなたはParentClassから継承しているので(制限事項がありますが、今のところそれらを無視しましょう)からParentClassを定義し、ChildClassの一部として定義したものも実装します。だから、ChildClassはこのように見える終わる:

child ChildClass { 

    public function sayHello() { 
    echo "Hello!"; 
    } 

    public function sayGoodbye() { 
    echo "Goodbye!"; 
    } 
} 

、これはあなたのコード内で「サブクラス」によって何を意味するかかもしれないが、あなただけで簡単に財産の話である可能性があります。

プロパティは、特定のクラスの一部として格納される変数です。オブジェクトである必要はありません(つまり、特定のクラスのインスタンス)。これは単なる通常の変数ですが、特定のタイプのオブジェクトで使用するか、またはそのオブジェクト内で使用するために定義されています。

2

まず、用語を修正しましょう。あなたはクラスではなくオブジェクトについて尋ねているようです。

オブジェクトを別のオブジェクトのプロパティに割り当てることができますが、これは継承とは完全に別です。それでは、あなたが書いたことは良く書かれ

$object->memberObject->methodOfMemberObject(); 

継承によって関連しているかどうかは、オブジェクトとするMemberObjectは完全に無関係です。

1

また、残念ながらいない可能性:クラスメソッド内の関数を定義する

 
class Oele { 
    function bla() { 
    // do stuff here 

    class Tiny { // syntax error 
     public $name; 
     public $age; 
     public $etc; 
     function __construct($name, $age, $etc) { 
     $this->name = $name; 
     // and so on 
     } 
     function calculateSomething() { 
     // return something usefull 
     } 
    } 

    $something = array(
     new Tiny('bla', 25, null), 
     new Tiny('oele', 24, null), 
     new Tiny('adoeuf', 41, null) 
    ); 
    } 
} 

はいえ可能です:

 
class Oele { 
    function bla() { 
    $data = ... 
    function doSomething($obj) { 
     return $obj->some * $obj->thing; 
    } 
    $data2 = array_map('doSomething', $data); 
    } 
} 
+0

PHP 5.3以降、doSomething()はクロージャーになる可能性があります。 –

+0

私は知っていますが、それは全体の点を無効にします。メソッド内で関数を定義することができます。 – Rudie

関連する問題