2016-07-14 15 views
5

so che entrambi danno gli stessi risultati ma non vedo l'ora di ascoltare le prestazioni.Differenza tra :: class vs :: className() in Yii2?

non sono sicuro, ma penso che ..

  • "MyClass::className()" causa che file di classe da caricare pure (la sua funzione Yii cui corpo è semplicemente get_called_class())

  • "MyClass::class "Penso che la proprietà della classe nativa di php non carichi il file php di classe e restituisca semplicemente il suo nome in base al namespace corrente o use.

Fammi sapere se ho ragione? o evidenzia la tua conoscenza per favore.

Ci sono molti posti in cui vogliamo solo un nome di classe completo e qualitativo, anche se non verrà utilizzato in quel momento. ma non mi piace anche mettere le stringhe hardcoded (a causa del duro refactoring)

+0

Una pratica consigliata è chiamare Xyz :: className() per ottenere la stringa del nome della classe in modo che sia possibile ricevere il supporto di completamento automatico IDE e il rilevamento degli errori in fase di compilazione. –

risposta

4

Sì, ho appena trovato che avevo ragione. proprietà nativa di classe

di PHP è il risparmio delle prestazioni .. (PHP 5.5+)

vedere qui http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class.name

quindi questo non causano file di classe da caricare, quindi, anche se la classe non esiste esso restituirà full className

Nota: la risoluzione del nome classe utilizzando :: class è una trasformazione di tempo di compilazione. Ciò significa che al momento in cui la stringa del nome della classe è non è stato ancora creato alcun caricamento automatico. Di conseguenza, i nomi delle classi vengono espansi anche se la classe non esiste. Nessun errore viene emesso nel caso .

+2

La funzione Yii è astratta e quindi può essere modificata in futuro. L'uso di ':: class' disabilita questa abilità. Dovresti anche confrontare le due versioni. – topher

0

get_called_class() è per l'utilizzo in metodi statici.

Yii utilizza autoloading quindi le classi vengono caricate comunque. Quindi non vi è alcuna differenza di tempo significativa tra questi due comandi.

È più importante guardare le prestazioni sul proprio codice. Controllare e comprendere questi collegamenti di ottimizzazione delle prestazioni per Yii 2.0: Yii2-Docs: Performance Tuning e Yii2-Docs:Lazy Loading and Eager Loading

+0

conosci qualsiasi riferimento riguardante MyClass :: classe –

+0

Conosco bene la classeName di Yii e tutto ciò che riguarda le prestazioni voglio sapere di più sulla proprietà di classe nativa di php –

+0

sicuro, ma sostengo che le prestazioni non sono significative perché yii utilizza l'autoloading. – devOp

Problemi correlati