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_SEPARATORjest 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_SEPARATORstał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_SEPARATORdo oddzielania ścieżek w zmiennej środowiskowej$PATH. To jest;w systemie Windows:inaczej