Ciao,
ho un dubio su come invocare un metodo ricorsivo dentro il costruttore (vabbè non c'entra molto dove lo invoco in realtà...)
Ho una classe che ha 2 variabili di istanza di cui la prima è un array chiamato heap mentre la seconda conterrà il numero di elementi presenti nell'array heap.
Eccovi la porzione di codice relativa alla definizione delle variabili di istanza ed al costruttore che le inizializza:
Non fate caso ai print_r() che sono stati inseriti solo come test...codice:<?php error_reporting(E_ALL); ini_set('display_errors', 1); /* Classe che implementa la struttura dati HEAP e la sua funzionalità per l'ordinamento di una collezione mediante l'algoritmo di ordinamento Heap Sort */ class Heap{ /* Variabile di istanza che implementa la struttura dati ad albero dell'heap per mezzo di un array */ private $heap = array(); private $heapSize; // Variabile di istanza che conterrà la dimensione dell'heap /* COSTRUTTORE: Copia l'array parametro nella variabile di istanza heap e mette dentro la variabile di istanza heapSize la sua dimensione */ public function __construct($arr){ for($i=0; $i<count($arr); $i++) $this->heap[$i+1] = $arr[$i]; $this->heapSize = count($this->heap);// Mette dentro heapSize la dimensione dell'array parametro echo "Heap inizializzato con i valori dell'array parametro, contenuto heap: "; print_r($this->heap); /* Invoca il metodo heapify() sull'array heap partendo dalla prima posizione che sarà così trasformato in un HEAP a tutti gli effeti */ // $this->heap = $this->heapify($this->heap, 1); echo "Dopo l'invocazione di heapify() il contenuto dell'heap è: "; print_r($this->heap); }
Il dubbio mi viene sull'invocazione del metodo ricorsivo heapify().
Praticamente io ho la variabile (che è un array) di istanza heap, tale array deve essere modificato e trasformato in una forma particolare. Il metodo heapify() è un metodo che trasforma tale array iniziale in modo ricorsivo a partire da un certo indice (il secondo parametro) in tale specifica forma.
Tralasciando come heapify() trasformi l'aray...mi sorge il dubbio...l'invocazione fatta così:
$this->heap = $this->heapify($this->heap, 1);
che mette dentro heap il valore restituito da heapify (che dovrebbe essere l'aray riarrangiato) va bene o no...a rivederla non mi sembra corretta...alla fine heapify() non deve restituire nulla...deve modificare l'array heap...
Quindi forse nopn è meglio invocarla così:e fare in modo che non restituisca nulla ma modifiche l'array $heap dell'oggetto in questione?codice:$this->heapify(1)
Grazie
Andrea

Rispondi quotando