Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98

    Overloading di metodi...esiste???

    Sbaglio o in php l'overloading di metodi di una classe non è possibile??? Oppure bisogna utilizzare qualche parola chiave???

  2. #2
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    Non ho ben capito come funziona la cosa!!!

  4. #4
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    secondo me non è possibile a si può simulare

    ecco come


    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  6. #6
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    c'è stata molto di recente una discussione iniziata da andr3a a riguardo e dopo non poco tweaking siamo riusciti a tirar fuori, molto più lui che io, una classe da estendere per far si che la classe che la estende supporti nativamente, senza quindi scrivere una riga di codice, l'overloading dei metodi con il type hinting

    il codice è ESTREMAMENTE PERFORMANTE, ed è possibile scaricarlo qua
    http://www.devpro.it/code/158.html

    Per fare l'overload è semplice

    basta definire una classe che usi la parola chiave extends per estendere la classe TypeHintingOverload dopo di che i metodi, dato che php non supporta nativamente la sintassi, bisogna chiamarli apponendo un suffisso del tipo _XYZ dove XYZ corrisponde ad un numero, questo vi permette anche di ordinarli per dargli una logica, se vi serve

    Dopo di che basta chiamare il metodo passando i normali parametri

    L'overloading funziona esclusivamente con tipi non primitivi quindi derivati degli oggetti (vostri oggetti in pratica) e gli array
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Originariamente inviato da daniele_dll
    L'overloading funziona esclusivamente con tipi non primitivi quindi derivati degli oggetti (vostri oggetti in pratica) e gli array
    non necessariamente

    codice:
    class Collection extends TypeHintingOverload {
    	
    	private	$arrayList = array();
    	
    	protected function push_1($primitive) {
    		$this->arrayList[] = $primitive;
    		return count($this->arrayList);
    	}
    	
    	protected function push_2(Collection $c) {
    		$this->arrayList = array_merge($this->arrayList, $c->getList());
    		return count($this->arrayList);
    	}
    	
    	public function getList(){
    		return $this->arrayList;
    	}
    	
    }
    
    $c = new Collection;
    $c->push("test");
    exit(''.$c->push($c));
    In pratica se sono tutti primitivi non è ammesso più di un metodo con quel numero di primitivi, se già il numero di primitivi è differente si.

    Se c'è almeno un Type Hinting a seconda del tipo e/o della posizione (primo argomento, unico argomento, terzo argomento) possono esserci anche primitive.

    L'overload ha senso con il type hinting, negli altri casi si aumentano solo i tempi di esecuzione perchè quello che si può fare con la __call, si può fare in qualunque metodo normale, tanto più che l'overload è dinamico

    codice:
    function pippo($a, $b = null, $c = true) { ... }
    Il problema dell'overload, in PHP5, esiste proprio perchè hanno implementato il Type Hinting ma non hanno implementato l'overload esplicito ... ergo se ho un metodo come quello usato nel primo esempio
    codice:
    public function push(Collection $c) {
    	$this->arrayList = array_merge($this->arrayList, $c->getList());
    	return count($this->arrayList);
    }
    non ho modo di cambiare il tipo di dato in ingresso tantomeno il comportamento del metodo ... ecco perchè ho creato la classe TypeHintingOverload, perchè scrivere stdClass e fare checks come se fosse un parametro senza type hint, non avrebbe senso (mentre negli altri casi, senza Type Hinting esplicito ... non ha senso, secondo me, sfruttare __call, dato che di suo rallenta almeno di 3 volte l'esecuzione del codice e soprattutto non serve a niente, si fa il metodo somma, riferito all'esempio di PHP news, e si usa quello per decidere il da farsi)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.