2016-04-08 11 views
0

Ich bin ein Anfänger in objektorientierten, würde ich gerne wissen, ob es möglich ist, mit einigen Cast, magische Methode oder objektorientierte Engineering, was im Kommentar Code unten aufrufen?PHP Methode in Iterator aufrufen

Vielen Dank im Voraus A.pe

<?php 
Class myArrayObj { 
    public $myArray ; 

    function __construct(){ 
     $this->myArray = array( 
    0 => 'a', 
    1 => array('subA','subB',array(0 => 'subsubA', 1 => 'subsubB', 2 => array(0 => 'deepA', 1 => 'deepB'))), 
    2 => 'b', 
    3 => array('subA','subB','subC'), 
    4 => 'c' 
    ); 
    } 

    function getNumber() { 
     return count($this->myArray); 
    } 
} 

$a = new myArrayObj(); 

$i = new RecursiveIteratorIterator(new RecursiveArrayIterator($a),RecursiveIteratorIterator::SELF_FIRST); 

foreach($i as $key => $value) { 
$type = gettype($value); 
$depth = $i->getDepth(); 

if($i->hasChildren()) { 
     echo "$depth: $key ($type) has children<br>"; 
     /* here is it possible to call ....->getNumber(); */ 
    } 
    else { 
     echo "$depth: $key ($type) has no children<br>"; 
     /* here is it possible to call ....->getNumber(); */ 
    } 
} 
+2

könnten Sie einfach tun '$ a-> getNumber()', aber ich fühle mich wie ich bin nicht die Frage richtig hier zu verstehen. – Andrew

+0

"Ist es möglich, mithilfe eines Cast, einer magischen Methode oder eines objektorientierten Engineerings das im folgenden Kommentarcode aufzurufen?" - Nein. Weil die Beziehung mit dem ursprünglichen Objekt gebrochen ist. 'RecursiveArrayIterator' wird das Objekt in Array umwandeln. – RomanPerekhrest

Antwort

0

wie diese rufen Sie einfach:

$a->getNumber(); 

Hier $a ist ein Ziel der myArrayObj Klasse. Sie können alle property und method von außerhalb der Klasse basierend auf seiner access modifier aufrufen.

Voll Code:

<?php 
Class myArrayObj { 
    public $myArray ; 

    function __construct(){ 
     $this->myArray = array( 
    0 => 'a', 
    1 => array('subA','subB',array(0 => 'subsubA', 1 => 'subsubB', 2 => array(0 => 'deepA', 1 => 'deepB'))), 
    2 => 'b', 
    3 => array('subA','subB','subC'), 
    4 => 'c' 
    ); 
    } 

    function getNumber() { 
     return count($this->myArray); 
    } 

    function countArray($ar) { 
     return count($ar); 
    } 
} 

$a = new myArrayObj(); 

$i = new RecursiveIteratorIterator(new RecursiveArrayIterator($a),RecursiveIteratorIterator::SELF_FIRST); 

foreach($i as $key => $value) { 
$type = gettype($value); 
$depth = $i->getDepth(); 

if($i->hasChildren()) { 
     echo "$depth: $key ($type) has children<br>"; 
     /* here is it possible to call ....->getNumber(); */ 
     echo $a->countArray($value); 
    } 
    else { 
     echo "$depth: $key ($type) has no children<br>"; 
     /* here is it possible to call ....->getNumber(); */ 
     echo $a->countArray($value); 
    } 
} 
+0

Hallo, meine Absicht ist, rufen Sie die -> getName() über $ i RecursiveIterator. – user6167852

+0

Für jeden Array-Löser innerhalb des Haupt-Array erhalten Sie das Zähl-Element ... nicht immer das Coutn des Main-Array ... ist es jetzt klarer? – user6167852

+0

Ja, Sie können. Rufen Sie einfach die Methode an, wo immer Sie möchten. –

Verwandte Themen