|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2009
Messaggi: 700
|
[PHP] Dubbio su costruttore, posso invocare metodi dentro al costruttore? Come?
Ciao,
questo è il mio primo esperimento di realizzazione in PHP OO (ed anche il primo in PHP in generale) quindi abbiate clemenza... Ho qualche dubbio su come realizzare il mio costruttore. Praticamente si tratta di una classe che implementa una struttura dati HEAP per implementare l'algoritmo di ordinamento Heap Sort...ma questo non è importante. Le variabili di istanza sono un array che implementa il mio HEAP ed una variabile heapSize che conterrà il numero di elementi inseriti in tale array. Il costruttore deve ricevere un array arr come parametro di ingresso. Tale array viene inizialmente copiato, con il ciclo foreach nell'array heap (nella variabile di istanza) e per ogni elemento copiato viene incrementato il valore della variabile heapSize. Fino a qui credo sia corretto...il problema viene dopo...per far si che l'array heap sia un HEAP a tutti gli effetti deve essere trasformato in una specifica forma...tale trasformazione viene eseguita da uno specifico metodo chiamato heapify() che dato un array generico cambia l'ordine degli elementi in modo tale da rispettare le proprietà di un heap. Il mio dubbio è: dentro al costruttore posso invocare un altro metodo oppure non posso? E se si...come devo fare? Come potete vedere, l'array parametro viene copiato elemento per elemento nell'array che rappresenta una delle variabili di istanza...e poi su tale variabile di istanza vorrei chiamare il metodo heapify per trasformare l'array generico in un array heap Il mio codice è questo: Codice:
<?php /* 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[]; private $heapSize = 0; // Numero di elementi correntemente dentro l'HEAP /* Costruttore: Crea un nuovo oggetto istanza di Heap. Riceve un qualunque array come parametro di input, lo copia dentro alla variabile di istanza heap[] (mettendoli dentro l'array Heap a partire dalla posizione 1) e su di esso richiama ilmetodo di classe heapify per trasformarlo in loco in un heap */ public function__construct($arr[]){ private $i; // Variabile privata del metodo da usare come contatore /* Scorre l'array ricevuto come parametro e lo copia nel'array heap traslando gli elementi una posizione in avanti (per farli partire dalla posizione 1 e non 0) */ foreach($arr as $chiave => $valore){ $heap[$chiave+1] = $arr[chiave]; // Copia gli elementi traslandoli $heapSize ++; //Incrementa di 1 il numero elementi inseriti nell'heap } /* Invoca il metodo heapify sull'oggetto che sarà trasformato in un HEAP */ $heap = heapify($heap); } ?> |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Si dentro al costruttore puoi chiamare altri metodi.
Codice PHP:
Da dove arriva? Inoltre, dove è il metodo nel costruttore? ![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Feb 2009
Messaggi: 700
|
Quote:
Il costruttore è il costruttore della classe heap ovvero: public function__construct($arr[]){ heap effettivamente non è un oggetto...forse stò facendo un po' di casini con Java in cui gli array sono oggetti ![]() Se dentro al costruttore volessi invocare il metodo heapify() per modificare l'array heap, andrebbe bene così: Codice:
$this->heap = $this->heapify($heap); Se andasse bene...tale metodo heapify dovrebbe essere un normale metodo private (perchè viene richiamato solo all'interno del costruttore e non deve essere mai richiamato da chi usa la classe) oppure dovrebbe essere anche static? Grazie |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
SI puoi richiamarlo e deve essere private
![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:45.