PHP
Costanti magiche
Ricerca…
Osservazioni
Le costanti magiche si distinguono per il loro modulo __CONSTANTNAME__
.
Ci sono attualmente otto costanti magiche che cambiano a seconda di dove sono usate. Ad esempio, il valore di __LINE__
dipende dalla riga in cui è utilizzato nel tuo script.
Queste costanti speciali sono case-insensitive e sono come segue:
Nome | Descrizione |
---|---|
__LINE__ | Il numero di riga corrente del file. |
__FILE__ | Risolto il percorso completo e il nome file del file con collegamenti simbolici. Se utilizzato all'interno di un include, viene restituito il nome del file incluso. |
__DIR__ | La directory del file. Se utilizzato all'interno di un include, viene restituita la directory del file incluso. Questo è equivalente a dirname(__FILE__) . Questo nome di directory non ha una barra finale a meno che non sia la directory root. |
__FUNCTION__ | Il nome della funzione corrente |
__CLASS__ | Il nome della classe. Il nome della classe include lo spazio dei nomi in cui è stato dichiarato (ad es. Foo\Bar ). Quando usato in un metodo tratto, __CLASS__ è il nome della classe in cui è usato il tratto. |
__TRAIT__ | Il nome del tratto. Il nome del tratto include lo spazio dei nomi in cui è stato dichiarato (ad es. Foo\Bar ). |
__METHOD__ | Il nome del metodo di classe. |
__NAMESPACE__ | Il nome dello spazio dei nomi corrente. |
Il caso d'uso più comune per queste costanti è il debug e la registrazione
Differenza tra __FUNCTION__ e __METHOD__
__FUNCTION__
restituisce solo il nome della funzione mentre __METHOD__
restituisce il nome della classe insieme al nome della funzione:
<?php
class trick
{
public function doit()
{
echo __FUNCTION__;
}
public function doitagain()
{
echo __METHOD__;
}
}
$obj = new trick();
$obj->doit(); // Outputs: doit
$obj->doitagain(); // Outputs: trick::doitagain
Differenza tra __CLASS__, get_class () e get_called_class ()
__CLASS__
costante magica __CLASS__
restituisce lo stesso risultato della funzione get_class()
chiamata senza parametri e restituiscono entrambi il nome della classe in cui è stata definita (ovvero dove hai scritto la chiamata di funzione / nome costante).
Al contrario, le get_class($this)
e get_called_class()
, restituiscono entrambi il nome della classe effettiva che è stata istanziata:
<?php
class Definition_Class {
public function say(){
echo '__CLASS__ value: ' . __CLASS__ . "\n";
echo 'get_called_class() value: ' . get_called_class() . "\n";
echo 'get_class($this) value: ' . get_class($this) . "\n";
echo 'get_class() value: ' . get_class() . "\n";
}
}
class Actual_Class extends Definition_Class {}
$c = new Actual_Class();
$c->say();
// Output:
// __CLASS__ value: Definition_Class
// get_called_class() value: Actual_Class
// get_class($this) value: Actual_Class
// get_class() value: Definition_Class
Costanti file e directory
File corrente
Puoi ottenere il nome del file PHP corrente (con il percorso assoluto) usando la costante magica __FILE__
. Questo è più spesso usato come tecnica di logging / debugging.
echo "We are in the file:" , __FILE__ , "\n";
Directory corrente
Per ottenere il percorso assoluto della directory in cui si trova il file corrente, utilizzare la costante magica __DIR__
.
echo "Our script is located in the:" , __DIR__ , "\n";
Per ottenere il percorso assoluto della directory in cui si trova il file corrente, utilizzare dirname(__FILE__)
.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Ottenere la directory corrente viene spesso utilizzata dai framework PHP per impostare una directory di base:
// index.php of the framework
define(BASEDIR, __DIR__); // using magic constant to define normal constant
// somefile.php looks for views:
$view = 'page';
$viewFile = BASEDIR . '/views/' . $view;
separatori
Il sistema Windows comprende perfettamente i percorsi
/
in quindiDIRECTORY_SEPARATOR
viene utilizzato principalmente durante l'analisi dei percorsi.
Oltre alle costanti magiche, PHP aggiunge alcune costanti fisse per lavorare con i percorsi:
- Costante
DIRECTORY_SEPARATOR
per separare le directory in un percorso. Prende il valore/
su * nix e\
su Windows. L'esempio con le viste può essere riscritto con:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Raramente utilizzato costante
PATH_SEPARATOR
per separare i percorsi nella variabile d'ambiente$PATH
. Lo è;
su Windows,:
altrimenti