Newsgroup: it.comp.www.php
Titolo: Differenza tra :: e ->

Che differenza c'è tra :: e -> per chiamare dei metodi?
E dove posso trovare una sorta di tips&tricks per la sintassi di php (un
po' come questa: 
http://openskill.info/infobox.php?ID=256
)?
Grazie!

 Grazie!

 
php.net
Ho provato a cercare info su 
php.net
, ma da "profano" devo dire che
ricercare l'informazione che si cerca è veramente difficile!
Manca, in generale, di intuitività... 
Comunque grazie mille per la spiegazione, che è stata davvero completa. 

 Manca, in generale, di intuitività... 
E' il reference di un linguaggio di programmazione, non un portale per le
famiglie! :)
Sotto ogni comando/struttura/funzione ci sono i commenti conun saco di
informazioni utili
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
There is practically no chance communications space satellites will
be used to provide better telephone, telegraph, television, or
radio service inside the United States.
      --T. Craven, FCC Commissioner, 1961

 generale, di intuitività...
A parere non solo mio ma anche di detrattori del linguaggio, il manuale 
online di PHP e` uno dei migliori esistenti. Certo, tutto si puo` 
migliorare.
In particolare sul tuo quesito, si tratta di nozioni "di base" della 
programmazione a oggetti, pertanto non e` descritto completamente nel 
manuale di PHP. Si da` per scontato che uno sappia la differenza.
Il manuale di PHP dice:
allows access to static, constant, and overridden members or methods of a 
class
Che presuppone che tu sappia cosa sia un metodo/attributo statico, 
costante o sovraccaricato di una classe (non di un oggetto, notare. :) )
 
Spiegare cosa sono avrebbe richiesto molto piu` spazio e avrebbe distratto 
la maggior parte degli utenti che in quella pagina cercano informazioni 
essenziali e specifiche di PHP per quell'operatore.
Il manuale online ha una decente parte introduttiva sui concetti del 
linguaggio, ma principalmente e` ottimo come reference per chi sa gia` 
programmare e cerca informazioni specifiche.
Per la programmazione a oggetti in PHP ti posso citare (ma non 
raccomandare perche` non li ho letti) alcuni libri, che ho elencato un 
paio di giorni fa su i.e.e-commerce:
Object-Oriented PHP Concepts, Techniques and Code (NoStarch Press)
Object-Oriented programming with PHP5 (Packt) 
PHP Object oriented solutions (Friends Of Ed)
PHP Objectts, Patterns and Practice (APress)
Bye.


Concordo sul fatto che il manuale online relativo alle funzioni built-
in del php sia molto ben fatto. Per quanto riguarda il linguaggio,
invece, così come per le nozioni che "prende per scontate", per non
parlare della grammatica formale, è tutto molto molto carente - a
tratti imbarazzante.
Mi spiego meglio: ogni programmatore sa in teoria cosa sia un overload
o uno static, e come funziona nel/i suo/i linguaggio/i preferito/i, e
cerca (provando) di vedere se anche in php è lo stesso. Andare per
tentativi è l'unica alternativa alla mancanza di una descrizione
formale del linguaggio. Normalmente non ci sono problemi nell'agire
così, ma ci sono tanti casi in cui php è particolare rispetto a
qualsiasi altro linguaggio, e questi casi non sono evidenziati come
dovrebbero (adesso come adesso mi viene in mente, ad esempio,
l'impossibilità di effettuare l'overload di un metodo di interfaccia,
procedura "scontata" in molti altri linguaggi ad oggetti).
Ultimamente avevo necessità di ottenere la grammatica formale del php
(in BNF ad esempio), e sono stato costretto a ricavarla dal codice
dello Zend (nemmeno vi dico la fatica che ho fatto a pulire chili e
chili regole inconsistenti presenti solo come hack). A proposito - se
potesse servire a qualcuno ho quasi finito :-)
Purtroppo sono questo genere di cose che non fanno passare php da
linguaggio "serio" (cosa che si rivela anche negli interventi/meeting
internazionali, basati sul concetto "poca teoria, molta pratica").
Come al solito, questa è solo la mia opinione.
Ciao!

 ricavarla dal codice dello Zend
E su questo hai ragione. Non sei il primo che cerca la grammatica di PHP e 
gli viene risposto picche.
Non so se perche` non esiste proprio o perche` la Zend non vuole che si 
implementino troppo facilmente interpreti o compilatori basati sulla 
stessa grammatica.
Bye.


Personalmente credo la risposta sia la prima, anche perchè, essendo un
progetto open source, è possibile ricavarla comunque, sebbene con un
po' di fatica. C'è da dire che, mentre scrivere un compilatore/
interprete è abbastanza facile, formalizzare un linguaggio è
un'impresa che pochi riescono a portare a termine con successo.

 manuale di PHP. Si da` per scontato che uno sappia la differenza.
Non vorrei creare flame inutili, però se mancano nozioni "di base", per
definizione stessa non si può chiamare "completo"... 
Comunque penso che se hanno fatto qualcosa del genere, lo scopo era quello di
essere il più fruibile possibile per tutti. Per me, alle prime armi, non è
stato così. In teoria, almeno secondo il mio modestissimo punto di vista, il
vero target dovrebbero essere i "nuovi utenti" (che sono poi quelli che
dovrebbero sfruttarlo di più).
Ho detto la mia. :)

 potesse servire a qualcuno ho quasi finito :-)
Qui c'è la versione EBNF fatta da me, basata sulla grammatica Yacc contenuta
nel file zend_language_parser.y, magari puoi confrontare:
http://www.icosaedro.it/articoli/php-syntax.html
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

 }
Questo dà Strict Standards: Declaration of b::m1() should be compatible with that of a::m1()
però devi mettere in php.ini
error_reporting  =  E_ALL | E_STYLE | E_STRICT
Questo del chilometrico php.ini è anche una delle tante cause che rendono
difficile formalizzare il linguaggio, scrivere librerie di codice
riutilizzabile e far funzionare le cose su server diversi. Ad esempio, per me
usare una variabile non inizializzata è un errore grave (che l'ipostazione di
prima rileva come Notice, ma meglio che niente), mentre per i più è una cosa
irrilevante. Questa tolleranza ha decretato il successo del linguaggio tra i
programmatori improvvisati, ed è impensabile cambiare le cose in corsa. Forse
va bene così.


 dovrebbero sfruttarlo di pi�).
Non credo. Il reference del linguaggio e' per il programmatore che vuol
verificare/approfondire l'uso di una funzione o verificarne le
(in)compatibilita'. Prova ne sono i commenti sotto molte funzioni che sono tutto
fuorche' per novellini.
I nuovi utenti si leggano i vari tutorial per nuovi utenti prima di affrontare
il reference.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Non cercare di vincere mai un gatto in testardaggine.
    --Robert A. Heinlein

On 9 Mar, 14:39, Umberto Salsi <sa...@icosaedro.italia> wrote:

uh! grande - ci darò sicuramente una confrontata. Ovviamente appena
avrò un formato decente posto tutto su internet :-)
Grazie!

 il reference.
Mi era stato consigliato come riferimento, ed ho semplicemente risposto che non
mi ci trovavo bene ed il perchè. Tutto qui.
Chiedo scusa se la mia affermazione ha provocato simili reazioni.
Saluti!

Antonio da Padova ha scritto:

a me sembra una sintassi abbastanza standard
:: chiama i metodi statici
-> chiama i metodi di istanza
i metodi statici possono essere invoca anche senza istanziare un oggetto
della classe, ad esempio una classe ipotetica math non avrebbe senso
come costruttore di oggetti quindi potrebbe definire ad esempio:
min,max,sum tutti come metodi statici e poi da codice:
$a=2;
$b=4;
$c = Math::sum($a,$b);
mentre una classe dipendenti potrebbe avere un metodo incrementa
stipendio mensile che accetta un int che rappresenta gli euro mensili di
aumento:
$luigi = new Dipendente();
$luigi->incremento_stipendio_mensike(22);
e poi potrebbe avere un metodo statico che ti dice quante istanze della
classe sono state fatte:
$num_dipendenti = Dipendente::quante_istanze();
nota che una volta che hai un oggetto istanziato puoi anche chiamare i
metodi statici con la sintassi dei metodi di istanza:
$luigi->quante_istanze();
e comunque viene chiamato: Dipendente::quante_istanze();
ciao ciao

 $luigi->incremento_stipendio_mensike(22);
<snip>
Commento tecnico: L'errore di battitura del nome della funzione quì è
irrilevante, in quanto quella funzione non verrà mai chiamata da
nessuno.

 $luigi->incremento_stipendio_mensike(22);
Luigi ringrazia :)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Life begins when you can spend your spare time programming
instead of watching television.
    --Cal Keegan

michelangelo giacomelli ha scritto:

scusate errore di battitura:
$luigi->incremento_stipendio_mensike(22);
doveva essere:
$luigi->incremento_stipendio_mensile(22);
errore mio :)

 nessuno.
puoi spiegare meglio cosa intendi dire?
grazie, g.

Giovanni R. ha scritto:

credo vada intesa come una battuta nel senso che oggi come oggi nessuno
ti aumenta lo stipendio :)

 ti aumenta lo stipendio :)
beh si - il senso era quello :)

 beh si - il senso era quello :)
ah ecco... solitamente sono piu' arguto :)
in realta', se Luigi e' dipendente di uno studio fallimentare, o legale,
assicurativo, borsistico, eccetera, forse qualcuno la esegue pure...
la crisi non e' mai per tutti.
(si', mi sto arrampicando sugli specchi :-) )
ciao, g.