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 de DIRECTORY_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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow