PHP
Magiczne stałe
Szukaj…
Uwagi
Stałe magiczne są rozróżniane według ich formy __CONSTANTNAME__
.
Obecnie istnieje osiem magicznych stałych, które zmieniają się w zależności od miejsca ich użycia. Na przykład wartość __LINE__
zależy od linii użytej w skrypcie.
Te specjalne stałe nie uwzględniają wielkości liter i są następujące:
Nazwa | Opis |
---|---|
__LINE__ | Aktualny numer wiersza pliku. |
__FILE__ | Pełna ścieżka i nazwa pliku z dowiązaniami symbolicznymi zostały rozwiązane. Jeśli zostanie zastosowany w pliku dołączanym, zwracana jest nazwa dołączonego pliku. |
__DIR__ | Katalog pliku. Jeśli zostanie zastosowany w pliku include, zwrócony zostanie katalog dołączonego pliku. Jest to równoważne dirname(__FILE__) . Ta nazwa katalogu nie ma ukośnika końcowego, chyba że jest to katalog główny. |
__FUNCTION__ | Nazwa bieżącej funkcji |
__CLASS__ | Nazwa klasy. Nazwa klasy obejmuje przestrzeń nazw, w której została zadeklarowana (np. Foo\Bar ). W przypadku metody cechy __CLASS__ jest nazwą klasy, w której używana jest cecha. |
__TRAIT__ | Nazwa cechy. Nazwa cechy obejmuje przestrzeń nazw, w której została zadeklarowana (np. Foo\Bar ). |
__METHOD__ | Nazwa metody klasy. |
__NAMESPACE__ | Nazwa bieżącego obszaru nazw. |
Najczęstszym przypadkiem użycia tych stałych jest debugowanie i rejestrowanie
Różnica między __FUNCTION__ a __METHOD__
__FUNCTION__
zwraca tylko nazwę funkcji, podczas gdy __METHOD__
zwraca nazwę klasy wraz z nazwą funkcji:
<?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
Różnica między __CLASS__, get_class () i get_called_class ()
__CLASS__
magiczna stała zwraca ten sam wynik co get_class()
wywołana bez parametrów i obie zwracają nazwę klasy, w której została zdefiniowana (tj. Gdzie napisałeś wywołanie funkcji / stałą nazwę).
W przeciwieństwie do tego, get_class($this)
i get_called_class()
zwrócą nazwę rzeczywistej klasy, która została utworzona:
<?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
Stałe plików i katalogów
Aktualny dokument
Możesz uzyskać nazwę bieżącego pliku PHP (ze ścieżką bezwzględną), używając magicznej stałej __FILE__
. Jest to najczęściej używane jako technika rejestrowania / debugowania.
echo "We are in the file:" , __FILE__ , "\n";
Aktualny katalog
Aby uzyskać bezwzględną ścieżkę do katalogu, w którym znajduje się bieżący plik, użyj magicznej stałej __DIR__
.
echo "Our script is located in the:" , __DIR__ , "\n";
Aby uzyskać bezwzględną ścieżkę do katalogu, w którym znajduje się bieżący plik, użyj dirname(__FILE__)
.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Pobieranie bieżącego katalogu jest często używane przez frameworki PHP do ustawienia katalogu podstawowego:
// 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;
Separatory
System Windows doskonale rozumie ścieżki
/
in, więcDIRECTORY_SEPARATOR
jest używany głównie podczas analizowania ścieżek.
Oprócz magicznych stałych PHP dodaje także stałe stałe do pracy ze ścieżkami:
-
DIRECTORY_SEPARATOR
stała do oddzielania katalogów na ścieżce. Ma wartość/
on * nix, a\
w systemie Windows. Przykład z widokami można przepisać za pomocą:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Rzadko używana stała
PATH_SEPARATOR
do oddzielania ścieżek w zmiennej środowiskowej$PATH
. To jest;
w systemie Windows:
inaczej