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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow