PHP
Magische constanten
Zoeken…
Opmerkingen
Magische constanten onderscheiden zich door hun __CONSTANTNAME__
vorm.
Er zijn momenteel acht magische constanten die veranderen, afhankelijk van waar ze worden gebruikt. De waarde van __LINE__
is __LINE__
afhankelijk van de regel die in uw script wordt gebruikt.
Deze speciale constanten zijn niet hoofdlettergevoelig en zijn als volgt:
Naam | Beschrijving |
---|---|
__LINE__ | Het huidige regelnummer van het bestand. |
__FILE__ | Het volledige pad en de bestandsnaam van het bestand met symlinks zijn opgelost. Indien gebruikt in een include, wordt de naam van het opgenomen bestand geretourneerd. |
__DIR__ | De map van het bestand. Indien gebruikt in een include, wordt de map van het opgenomen bestand geretourneerd. Dit is gelijk aan dirname(__FILE__) . Deze mapnaam heeft geen slash, tenzij het de hoofdmap is. |
__FUNCTION__ | De huidige functienaam |
__CLASS__ | De klassennaam. De klassenaam bevat de naamruimte waarin deze is gedeclareerd (bijvoorbeeld Foo\Bar ). Bij gebruik in een eigenschapsmethode is __CLASS__ de naam van de klasse waarin de eigenschap wordt gebruikt. |
__TRAIT__ | De eigenschapsnaam. De kenmerknaam bevat de naamruimte waarin deze is gedeclareerd (bijvoorbeeld Foo\Bar ). |
__METHOD__ | De naam van de klassenmethode. |
__NAMESPACE__ | De naam van de huidige naamruimte. |
De meest voorkomende use case voor deze constanten is debuggen en loggen
Verschil tussen __FUNCTION__ en __METHOD__
__FUNCTION__
retourneert alleen de naam van de functie, terwijl __METHOD__
de naam van de klasse retourneert, samen met de naam van de functie:
<?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
Verschil tussen __CLASS__, get_class () en get_called_class ()
__CLASS__
magic constante geeft hetzelfde resultaat als de functie get_class()
zonder parameters en ze retourneren allebei de naam van de klasse waar deze is gedefinieerd (dwz waar u de functie-aanroep / constante-naam hebt geschreven).
De functies call get_class($this)
en get_called_class()
retourneren beide de naam van de daadwerkelijke klasse die is geïnstantieerd:
<?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
Bestand- en mapconstanten
Huidig bestand
U kunt de naam van het huidige PHP-bestand (met het absolute pad) krijgen met de magische constante __FILE__
. Dit wordt meestal gebruikt als een logging / debugging-techniek.
echo "We are in the file:" , __FILE__ , "\n";
Huidige map
Gebruik de magische constante __DIR__
om het absolute pad naar de map te krijgen waar het huidige bestand zich bevindt.
echo "Our script is located in the:" , __DIR__ , "\n";
Gebruik dirname(__FILE__)
om het absolute pad naar de map te krijgen waar het huidige bestand zich bevindt.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Het verkrijgen van de huidige map wordt vaak gebruikt door PHP frameworks om een basismap in te stellen:
// 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;
afscheiders
Windows-systeem begrijpt de
/
in-paden perfect, dus deDIRECTORY_SEPARATOR
wordt voornamelijk gebruikt bij het parseren van paden.
Naast magische constanten voegt PHP ook enkele vaste constanten toe voor het werken met paden:
-
DIRECTORY_SEPARATOR
constante voor het scheiden van mappen in een pad. Heeft waarde/
on * nix en\
op Windows. Het voorbeeld met weergaven kan worden herschreven met:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Zelden gebruikte
PATH_SEPARATOR
constante voor het scheiden van paden in de omgevingsvariabele$PATH
. Het is;
op Windows,:
anders