PHP
Magiska konstanter
Sök…
Anmärkningar
Magiska konstanter kännetecknas av sin __CONSTANTNAME__
form.
Det finns för närvarande åtta magiska konstanter som ändras beroende på var de används. Till exempel beror värdet på __LINE__
på den linje som det används i ditt skript.
Dessa speciella konstanter är okänsliga för fall och är som följer:
namn | Beskrivning |
---|---|
__LINE__ | Filens nuvarande radnummer. |
__FILE__ | Filens hela sökväg och filnamn med symlänkar har lösts. Om det används i ett inkluderande returneras namnet på den inkluderade filen. |
__DIR__ | Katalogen för filen. Om den används i en inkludering returneras katalogen för den inkluderade filen. Detta motsvarar dirname(__FILE__) . Det här katalognamnet har inte ett snedstreck om det inte är rotkatalogen. |
__FUNCTION__ | Det aktuella funktionsnamnet |
__CLASS__ | Klassens namn. Klassnamnet innehåller det namnutrymme som det förklarades i (t.ex. Foo\Bar ). När det används i en __CLASS__ är __CLASS__ namnet på klassen som egenskaperna används i. |
__TRAIT__ | Egenskapens namn. Egenskapsnamnet innehåller det namnutrymme som det förklarades i (t.ex. Foo\Bar ). |
__METHOD__ | Klassmetodens namn. |
__NAMESPACE__ | Namnet på det aktuella namnområdet. |
Det vanligaste fallet för dessa konstanter är felsökning och loggning
Skillnaden mellan __FUNCTION__ och __METHOD__
__FUNCTION__
returnerar bara namnet på funktionen medan __METHOD__
returnerar namnet på klassen tillsammans med namnet på funktionen:
<?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
Skillnad mellan __CLASS__, get_class () och get_called_class ()
__CLASS__
returnerar samma resultat som get_class()
-funktion som kallas utan parametrar och båda returnerar namnet på klassen där den definierades (dvs. där du skrev funktionssamtalet / konstantnamnet).
Däremot får get_class($this)
och get_called_class()
-funktioner samtal, kommer båda att returnera namnet på den faktiska klassen som instanserades:
<?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
File & Directory Constants
Nuvarande fil
Du kan få namnet på den aktuella PHP-filen (med den absoluta sökvägen) med hjälp av __FILE__
. Detta används oftast som en loggning / felsökningsteknik.
echo "We are in the file:" , __FILE__ , "\n";
Aktuell katalog
För att få den absoluta sökvägen till katalogen där den aktuella filen finns, använd __DIR__
.
echo "Our script is located in the:" , __DIR__ , "\n";
För att få den absoluta sökvägen till katalogen där den aktuella filen finns, använd dirname(__FILE__)
.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Att få aktuell katalog används ofta av PHP-ramverk för att ställa in en baskatalog:
// 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;
separatorer
Windows-systemet förstår perfekt in
/
in-vägar såDIRECTORY_SEPARATOR
används främst när du analyserar banor.
Förutom magiska konstanter lägger PHP också till några fasta konstanter för att arbeta med vägar:
-
DIRECTORY_SEPARATOR
konstant för att separera kataloger i en sökväg. Tar värde/
på * nix och\
på Windows. Exemplet med vyer kan skrivas om med:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Sällan använt
PATH_SEPARATOR
konstant för att separera banor i miljövariabeln$PATH
. Det är;
på Windows:
annars