Burvju metodes un iepriekš noteiktas konstantes PHP. Konstantu izveidošana PHP - const un define() #3 const saprot tikai skalārus

Laba diena visiem. Aleksejs Guļiņins sazinās. Pēdējā rakstā mēs apskatījām ekvivalences operators PHP. Šajā rakstā es vēlētos runāt par konstantes PHP. Skolā jūs bieži sastapāties ar konstantēm, piemēram, “PI numuru” vai no fizikas universālo gāzes konstanti (R). Konstantes tiek definētas vienreiz un viņi vairs nemainās. Tas pats attiecas uz konstantēm programmēšanā, t.i. mēs definējam konstanti vienreiz, un tā nekad nemainās programmas kodā. Konstantes var būt dažādas matemātiskas vērtības, ceļi uz failiem.

Kā konstante atšķiras no mainīgā:

1) Tas ir definēts vienreiz, un tam nevar piešķirt vērtību nekur citur,
2) Lai uz to atsauktos, pirms tā nav jāliek zīme “$” (šeit ir mīnuss - tagad mēs nevaram izmantot konstantes nosaukumu teksta virknē).
Izdrukāsim konstanti "PI":

Ir divu veidu konstantes: tulka definēts un lietotāja definēts:

Tulka definēto konstantu piemēri:

1) __FILE__ - saglabā tā faila nosaukumu, kas satur pašlaik izpildāmo kodu,
2) PHP_VERSION — PHP tulka versija,
3) PHP_OS - operētājsistēmas versija, kurā darbojas PHP.

Ierakstiet šo kodu un skatiet, kādas ir citas konstantes:

Jūs varat definēt savas konstantes, tas tiek darīts, izmantojot definēšanas operatoru. Definēsim 2 konstantes:

"; echo Const2; ?>

Šajā gadījumā mēs parādīsim šo konstantu vērtības.

Pēc noklusējuma konstante nosaukums ir reģistrjutīgs; to var atspējot, izmantojot neobligāto trešo parametru, piemēram:

"; echo newW1; ?>

Jūs redzēsit, ka viss darbojas (iepriekšējā piemērā tas nedarbosies, jo ir reģistrjutīgs).

Pievērsiet uzmanību pēdiņām, kurās rakstīts konstantes nosaukums. Tas ir jādara. Turklāt jūs nevarat izveidot konstantes ar vienādiem nosaukumiem.

PHP jūs varat pārbaudīt, vai konstante pastāv vai ne, izmantojot funkciju definēts (pastāvīgs nosaukums). Apskatīsim piemēru, lai tas būtu skaidrs:

Ierakstiet šo piemēru un skatiet, kas notiek.

(PHP 5 >= 5.3.0, PHP 7)

Šis jautājumu saraksts ir sadalīts divās daļās: vispārīgi jautājumi un dažas ieviešanas specifikas, kas ir noderīgas pilnīgākai izpratnei.

Pirmkārt, vispārīgi jautājumi.

  1. Ja es neizmantoju nosaukumvietas, vai kāds no tiem ir jāuzskata par svarīgu?
  2. Kā nosaukumvietā izmantot iekšējās vai globālās klases?
  3. Kā lietot klases funkcijas nosaukumvietās vai konstantes savā nosaukumvietā?
  4. Kā ir tāds vārds \Mans vārds vai \nosaukums konvertēts?
  5. Tāpat kā vārds, piemēram Mans vārds konvertēts?
  6. Tāpat kā nekvalificēts klases nosaukums, piemēram, nosaukums konvertēts?
  7. Piemēram, nekvalificēts funkcijas nosaukums vai nekvalificēts nemainīgs nosaukums, piemēram, nosaukums konvertēts?

Dažas nosaukumvietas ieviešanas detaļas, kuras ir noderīgas izprast.

  1. Importētie nosaukumi nevar būt pretrunā ar klasēm, kas definētas tajā pašā failā.
  2. Izmantojot operatoru, nevar importēt ne funkcijas, ne konstantes izmantot.
  3. Dinamiskajiem nosaukumvietas nosaukumiem (identifikatoriem, kas ietverti pēdiņās) ir jāiekļauj atpakaļvērstā slīpsvītra.
  4. Jūs nevarat atsaukties uz nedefinētām konstantēm, izmantojot slīpsvītru. Tiek parādīta fatāla kļūda
  5. Nav iespējams ignorēt īpašas konstantes, piemēram, NULL, TRUE, FALSE, ZEND_THREAD_SAFE vai ZEND_DEBUG_BUILD

Ja es neizmantoju nosaukumvietas, vai kāds no tiem ir jāuzskata par svarīgu?

Nē. Nosaukumvietas neietekmē esošu kodu jebkurā formā vai kodu, kas nesatur nosaukumvietas. Ja vēlaties, varat ierakstīt šādu kodu:

1. piemērs Piekļuve globālajām klasēm ārpus nosaukumvietām

$a = jauns \ stdClass ;
?>

Tas ir funkcionāli līdzvērtīgs šim:

2. piemērs Piekļuve globālajām klasēm ārpus nosaukumvietām

$a = jauna stdClass ;
?>

Kā nosaukumvietā izmantot iekšējās vai globālās klases?

3. piemērs Piekļuve iekšējām klasēm vārdu telpās

namespace foo ;
$a = jauns \ stdClass ;

funkciju pārbaude (\ArrayObject $type hintexample = null ) ()

$a = \ DirectoryIterator :: CURRENT_AS_FILEINFO ;

// iekšējās vai globālās klases paplašinājums
klase MyException extends\Exception()
?>

Kā lietot klases funkcijas nosaukumvietās vai konstantes savā nosaukumvietā?

4. piemērs Piekļuve iekšējām klasēm, funkcijām vai konstantēm nosaukumvietās

namespace foo ;

klase MyClass()

// izmantot klasi no pašreizējās nosaukumvietas
funkciju pārbaude (MyClass $type hintexample = null ) ()
// cits veids, kā izmantot klasi no pašreizējās nosaukumvietas
funkciju tests(\foo\MyClass $typehintexample = null)()

// klases paplašināšana no pašreizējās nosaukumvietas
klase paplašinātā paplašina MyClass()

// piekļuve globālajai funkcijai
$a = \globalfunc();

// piekļuve globālajai konstantei
$b = \INI_ALL ;
?>

Kā ir tāds vārds \Mans vārds vai \nosaukums konvertēts?

Vārdi, kas sākas ar \ vienmēr tiek pārvērsti tā, kā tie izskatās, t.i. \Mans vārds- tas patiesībā ir Mans vārds, Un \Izņēmums-Šo Izņēmums.

5. piemērs Absolūtie vārdi

namespace foo ;
$a = jauns \ mans \ vārds (); // izveido klases "mans\vārds" gadījumu
echo\strlen("čau"); // izsauc funkciju "strlen".
$a = \INI_ALL ; // mainīgajam $a tiek piešķirta konstantes "INI_ALL" vērtība
?>

Tāpat kā vārds, piemēram Mans vārds konvertēts?

Nosaukumi, kas satur atpakaļvērstā slīpsvītru, bet nesākas ar to, piemēram, Mans vārds

mans cits nosaukums, tad šis sinonīms attiecas uz mans V Mans vārds.

Mans vārds.

6. piemērs Pilni vārdi

namespace foo ;
izmantot bla \ blah kā foo ;

$a = jauns mans\vārds(); // izveido klases "foo\my\name" gadījumu
foo\bar::nosaukums(); // izsauc statisko metodi "name" klasē "blah\blah\bar"
mans\bārs(); // izsauc funkciju "foo\my\bar"
$a = mans\BAR; // piešķir mainīgajam $a konstantes "foo\my\BAR" vērtību
?>

Tāpat kā nekvalificēts klases nosaukums, piemēram, nosaukums konvertēts?

Klašu nosaukumi, kuros nav slīpsvītras, piemēram, nosaukums var pārveidot divos dažādos veidos.

Ja ir importēšanas izteiksme, kas rada sinonīmu nosaukums cits nosaukums, tad tiek lietots šis sinonīms.

Pretējā gadījumā pašreizējā nosaukumvietas nosaukums kļūst par prefiksu Mans vārds.

7. piemērs Nekvalificēti klašu nosaukumi

namespace foo ;
izmantot bla \ blah kā foo ;

$a = jauns vārds(); // izveido klases "foo\name" gadījumu
foo::vārds(); // izsauc statisko metodi "name" klasē "blah\blah"
?>

Piemēram, nekvalificēts funkcijas nosaukums vai nekvalificēts nemainīgs nosaukums, piemēram, nosaukums konvertēts?

Funkciju vai konstantu nosaukumi, kas nesatur slīpsvītru, piemēram, nosaukums var pārveidot divos dažādos veidos.

Pirmkārt, pašreizējā nosaukumvietas nosaukuma prefikss ir nosaukums.

Tad, ja konstante vai funkcija nosaukums neeksistē pašreizējā nosaukumvietā, izmantojot globālu konstanti vai funkciju nosaukums, ja tāda pastāv.

8. piemērs Nepabeigta funkcija vai nemainīgi nosaukumi

namespace foo ;
izmantot bla \ blah kā foo ;

const FOO = 1;

funkcija my()()
funkcija foo()()
funkciju kārtošana (& $a )
{
\sort($a); // izsauc globālo funkciju "kārtot"
$a = masīva_pārvēršana($a);
atgriezt $a ;
}

Mans(); // izsauc "foo\my"
$a = strlen("čau"); // izsauc globālo funkciju "strlen", jo "foo\strlen" neeksistē
$arr = masīvs(1, 3, 2);
$b = kārtot($arr); // izsauc funkciju "foo\sort"
$c = foo(); // izsauc funkciju "foo\foo" - imports netiek lietots

$a = FOO ; // piešķir mainīgajam $a konstantes "foo\FOO" vērtību - imports netiek lietots
$b = INI_ALL ; // piešķir mainīgajam $b globālās konstantes "INI_ALL" vērtību
?>

Importētie nosaukumi nevar būt pretrunā ar klasēm, kas definētas tajā pašā failā.

Derīgas ir šādas skriptu kombinācijas:

namespace my\stuff;
klase MyClass()
?>

namespace cits ;
klases lieta ()
?>

namespace my\stuff;
iekļaut "file1.php" ;
iekļaut "cits.php" ;


$a = jauns MyClass ; // izveido klases "lieta" gadījumu no nosaukumvietas "cits"
?>

Nav nosaukumu pretrunu, lai gan klase Mana klase eksistē nosaukumvietā Manas lietas jo MyClass definīcija ir atsevišķā failā. Tomēr šis piemērs rada fatālu nosaukumu konflikta kļūdu, jo klase MyClass ir definēta tajā pašā failā, kurā atrodas lietošanas priekšraksts.

namespace my\stuff;
izmantot citu \ lietu kā MyClass ;
klase MyClass() // fatāla kļūda: MyClass konfliktē ar importēšanas izteiksmi
$a = jauns MyClass ;
?>

Ligzdotas nosaukumvietas nav atļautas.

PHP neļauj nosaukumvietas ligzdot savā starpā

nosaukumvieta my\stuff(
ligzdota nosaukumvieta (
klase foo ()
}
}
?>

Tomēr, lai simulētu ligzdotas nosaukumvietas, piemēram, šādi:

nosaukumvieta my\stuff\nested (
klase foo ()
}
?>

Pirms PHP 5.6, izmantojot operatoru, nevarēja importēt ne funkcijas, ne konstantes izmantot.

Pirms PHP 5.6 vienīgie operatora ietekmētie elementi ir izmantot ir nosaukumvietas un klašu nosaukumi. Lai saīsinātu garus konstantu vai funkciju nosaukumus, importējiet to saturu nosaukumvietā.

namespace raktuves ;
izmantot ultra\long\ns\name;

$a = vārds \ CONSTANT ;
name\func();
?>

Kopš PHP 5.6 ir kļuvis iespējams importēt un izveidot aizstājvārdus funkcijām un nemainīgiem nosaukumiem.

Dinamiskajiem nosaukumvietas nosaukumiem (identifikatoriem, kas ietverti pēdiņās) ir jāiekļauj atpakaļvērstā slīpsvītra.

Ir ļoti svarīgi to attēlot, jo atpakaļvērstā slīpsvītra tiek izmantota kā atsoļa rakstzīme virknēs. Ja to lieto virknē, tas vienmēr ir jādublē, pretējā gadījumā pastāv neparedzētu seku risks:

9. piemērs Kļūdas, izmantojot nosaukumvietas nosaukumu divpēdiņu virknē

$a = "bīstams\nosaukums" ; // \n ir jauna rindiņa dubultpēdiņu virknē!
$obj = jauns $a ;

$a = "nav\vispār\bīstams" ; // šeit nav problēmu.
$obj = jauns $a ;
?>

Vienpēdiņu virknēs atpakaļvērstā slīpsvītra kā norobežotājs ir drošāka, taču ieteicamā prakse visās virknēs neizmantot atpakaļvērstās slīpsvītras joprojām ir labākā prakse.

Jūs nevarat atsaukties uz nedefinētām konstantēm, izmantojot slīpsvītru. Tiek parādīta fatāla kļūda

Jebkura nedefinēta konstante, kas ir nekvalificēts nosaukums, piemēram, FOO, tiks parādīts ziņojums, kurā teikts, ka PHP to ir pieņēmis FOO bija konstantes vērtība. Jebkura konstante ar kvalificētu vai absolūtu nosaukumu, kas satur slīpsvītru, radīs fatālu kļūdu, ja tā netiks atrasta.

10. piemērs Nedefinētas konstantes

nosaukumvietas josla;
$a = FOO ; // parāda brīdinājumu: nedefinētas konstantes "FOO" pieņemts "FOO";
$a = \FOO ; // fatāla kļūda: undefined namespace konstante FOO
$a = bārs\FOO; // fatāla kļūda: undefined namespace konstante bar\Bar\FOO
$a = \Bar \FOO ; // fatāla kļūda: undefined namespace konstante Bar\FOO
?>

Nav iespējams ignorēt īpašas konstantes, piemēram, NULL, TRUE, FALSE, ZEND_THREAD_SAFE vai ZEND_DEBUG_BUILD

Jebkurš mēģinājums definēt nosaukumvietas konstanti, kas atbilst īpašu iebūvēto konstantu nosaukumiem, radīs fatālu kļūdu.

11. piemērs Nedefinētas konstantes

nosaukumvietas josla;
const NULL = 0; // Fatāla kļūda;
const true = "stulbs" ; // arī fatāla kļūda;
// utt.
?>

pirms 7 gadiem

Ir veids, kā definēt nosaukumtelpas konstanti, kas ir īpaša, iebūvēta konstante, izmantojot definēšanas funkciju un iestatot trešo parametru case_insensitive uz false:

namespace foo ;
definēt (__NAMESPACE__ . "\NULL" , 10 ); // definē konstanti NULL pašreizējā nosaukumvietā


?>

Nav nepieciešams norādīt nosaukumvietu izsaukumā, lai definētu (), kā tas parasti notiek
namespace foo ;
define(INI_ALL, "josla"); // rada paziņojumu — konstante INI_ALL jau ir definēta. Bet:

Definēt (__NAMESPACE__ . "\INI_ALL" , "bar" ); // definē konstanti INI_ALL pašreizējā nosaukumvietā
var_dump(INI_VISI); // parādīs virkni (3)"joslu". Pagaidām nekas nepārbaudīts. Bet:

Define("NULL", 10); // definē konstanti NULL pašreizējā nosaukumvietā...
var_dump(NULL); // rādīs 10
var_dump(null); // parādīs NULL
?>

Ja parametram reģistrs nejutīgs ir iestatīts uz True
namespace foo ;
definēt (__NAMESPACE__ . "\NULL" , 10 , true ); // rada paziņojumu - Constant null jau ir definēts
?>

pirms 3 gadiem

Veidojot klases vai izsaucot statiskās metodes no nosaukumvietām, izmantojot mainīgos, jāpatur prātā, ka tām ir nepieciešama pilna nosaukumvieta, lai varētu izmantot atbilstošo klasi; NEDRĪKST izmantot aizstājvārdu vai īso vārdu, pat ja tas tiek izsaukts tajā pašā nosaukumvietā. Ja tas netiek ņemts vērā, kodā var tikt izmantota nepareiza klase, nāvējoši trūkstošas ​​klases izņēmums vai kļūdas vai brīdinājumi.

Šādos gadījumos varat izmantot maģisko konstanti __NAMESPACE__ vai tieši norādīt pilnu nosaukumvietu un klases nosaukumu. Funkcijai class_exists ir nepieciešama arī pilna nosaukumvieta un klases nosaukums, un to var izmantot, lai nodrošinātu, ka trūkstošo klašu dēļ netiks izlaista fatāla kļūda.

Vārdtelpa foo ;
klases josla (
publisks statiskās funkcijas tests() (
atgriezties get_sauca_klase();
}
}

nosaukumvieta Foo\Foo;
klase Josla pagarinās \Foo \Bar (
}

Var_dump(josla::tests()); // string(11) "Foo\Foo\Bar"

$bar = "Foo\Bar" ;
var_dump($bar::test()); // string(7) "Foo\Bar"

$bar = __NAMESPACE__. "\Bārs" ;
var_dump($bar::test()); // string(11) "Foo\Foo\Bar"

$bar = "Bārs" ;
var_dump($bar::test()); // FATĀLĀ KĻŪDA: Klase "josla" nav atrasta vai ir izmantota nepareiza klase \josla

Šajā piezīmē mēs runāsim par konstantēm. Kā parasti, apskatīsim pašu konstantu jēdzienu programmēšanas valodās un redzēsim, kā tās tiek deklarētas un izmantotas konstantes PHP.

Konstantes un konstantes jēdziens PHP

Vārdam konstante jums jau vajadzētu būt pazīstamam no matemātikas:

“Matemātiskā konstante- daudzums, kura vērtība nemainās.

Tas pats ir PHP. Pastāvīgi PHP ir identifikators, kas kalpo, lai apzīmētu vienkāršu vērtību (virkni, kādu skaitli), kas nevar mainīties koda izpildes laikā.

Lai deklarētu konstanti (piešķirtu tai vērtību), izmantojiet funkciju definēt. Pastāvīgas deklarācijas piemērs:

Pastāvīgie nosaukumi PHP ir reģistrjutīgi (lielie un mazie burti atšķiras), tāpēc jums jābūt uzmanīgiem. Pastāv arī vienošanās, ka nemainīgie nosaukumi vienmēr tiek rakstīti ar lielajiem burtiem.

Pastāvīgajam nosaukumam jāsākas ar burtu vai pasvītrojumu “_”, un tas var sastāvēt no burtiem, cipariem un pasvītrām.

Apskatīsim vienkāršu konstantes izmantošanas piemēru:

Šajā piemērā mēs deklarējām konstanti un izmantojām to programmā.

Kam tiek izmantotas konstantes un vai nav vieglāk izmantot mainīgos?

Kā jau minēts, konstantes nevar mainīt savas vērtības programmas izpildes laikā. Konstantēs parasti tiek saglabāti pastāvīgie vietnes parametri, piemēram, datu bāzes piekļuves informācija (resursdators, lietotāja pieteikšanās un parole, datu bāzes nosaukums), vietnes atrašanās vieta diskā un daudzi citi iestatījumi.

Ja mēs izmantojam mainīgos, skripts var nejauši (kļūdas gadījumā) mainīt mainīgā vērtību un nedarbosies, kā jūs plānojāt.

Izmantojot konstantes, tiek nodrošināts, ka vērtība, kuru norādāt, deklarējot konstanti, paliek nemainīga.

Pēdējā atjaunināšana: 1.11.2015

Konstantes, tāpat kā mainīgie, saglabā noteiktu vērtību, bet atšķirībā no mainīgajiem, konstantes vērtību var iestatīt tikai vienu reizi, un tad mēs to nevaram mainīt. Piemēram, definēsim skaitlisko konstanti:

Lai definētu konstanti, izmantojiet definēšanas operatoru, kam ir šāda forma: define(string $name, string $value, bool $case_sen=false) . Parametrs $name norāda konstantes nosaukumu, bet parametrs $value norāda tās vērtību. Trešais izvēles parametrs izmanto Būla vērtību true vai false . Ja vērtība ir nepatiesa, tad, izmantojot konstanti, tās reģistrs tiks ņemts vērā, ja patiess, reģistrs netiks ņemts vērā. Mūsu gadījumā trešais parametrs netiek izmantots, tāpēc pēc noklusējuma tas ir nepatiess.

Pēc konstantes definēšanas mēs to varam izmantot tāpat kā parasto mainīgo. Vienīgais izņēmums ir tas, ka mēs nevarēsim mainīt tā vērtību. Vēl viena atšķirība ar mainīgo ir tā, ka jums nav jāizmanto zīme $. Tas ir, izteiksme NUMBER=33; nedarbosies.

Iepriekš noteiktas konstantes

Papildus programmētāja izveidotajām konstantēm, PHP ir vairākas iebūvētas konstantes:

    FILE__ : saglabā pilnu pašreizējā faila ceļu un nosaukumu

    LINE__ : saglabā pašreizējās rindas numuru, ko tulks apstrādā

    DIR__: saglabā pašreizējā faila direktoriju

    FUNCTION__: apstrādājamās funkcijas nosaukums

    CLASS__: pašreizējās klases nosaukums

    METHOD__: apstrādājamās metodes nosaukums

    NAMESPACE__ : pašreizējās nosaukumvietas nosaukums

Piemēram, izdrukāsim pašreizējo izpildāmo rindu un faila nosaukumu:

Konstantes esamības pārbaude

Lai pārbaudītu, vai konstante ir definēta, mēs varam izmantot bool definēto (string $name) funkciju. Ja ir definēta konstante $name, funkcija atgriezīs true

Konstantes ir vienkāršu vērtību identifikatori (nosaukumi). Pamatojoties uz to nosaukumu, ir viegli saprast, ka to vērtība nevar mainīties skripta izpildes laikā (izņēmumi ir "maģiskās" konstantes, kas patiesībā nav konstantes vārda pilnā nozīmē). Pastāvīgie nosaukumi ir reģistrjutīgi. Pēc vienošanās nemainīgie nosaukumi vienmēr tiek rakstīti ar lielajiem burtiem.

Konstantes nosaukumam ir jāievēro tie paši noteikumi kā citiem PHP nosaukumiem. Derīgs nosaukums sākas ar burtu vai pasvītrojumu un sastāv no burtiem, cipariem un pasvītrojumiem. Regulārā izteiksme konstanta nosaukuma pareizības pārbaudei izskatās šādi: *

komentēt: "burtu" jēdziens šeit ir rakstzīmes a-z, A-Z un citas rakstzīmes ar ASCII kodiem no 127 līdz 255 (0x7f-0xff).

Sintakse

Varat definēt konstanti, izmantojot funkciju define() vai izmantojot atslēgvārdu konstārpus klases deklarācijas kopš PHP 5.3.0. Kad konstante ir definēta, tās vērtību nevar mainīt vai atzīt par nederīgu.

Konstantēs var būt tikai skalārie dati (būla, vesela skaitļa, peldošā un virknes veidi). Ir iespējams arī definēt tipa konstantes, taču no tā jāizvairās, jo tas var radīt negaidītus rezultātus.

Konstantes vērtību var iegūt, norādot tās nosaukumu. Atšķirībā no mainīgajiem, jūs nav vajadzības pirms konstanta nosaukuma ar simbolu $ . Varat arī izmantot funkciju konstante(), lai iegūtu konstantes vērtību, ja konstantes nosaukumu ģenerējat dinamiski. Izmantojiet funkciju get_defined_constants(), lai iegūtu visu deklarēto konstantu sarakstu.

komentēt: konstantes un (globālie) mainīgie atrodas dažādās nosaukumu telpās. Tas nozīmē, ka, piemēram, PATIESA un $TRUE ir pilnīgi dažādas lietas.

Ja izmantojat nedefinētu konstanti, PHP pieņem, ka domājat konstantes nosaukumu, it kā būtu norādīts virknes literāls (CONSTANT, nevis "CONSTANT"). Tas radīs E_NOTICE līmeņa kļūdu. Skatiet arī rokasgrāmatas nodaļu, kurā paskaidrots, kāpēc $foo ir nepareizs (protams, ja vien neesat to paziņojis vispirms). bārs kā konstante, izmantojot define()). Ja vēlaties tikai pārbaudīt, vai konstante ir definēta, izmantojiet funkciju definēts().

Atšķirības starp konstantēm un mainīgajiem:

  • Konstantēm nav dolāra zīmes prefiksa ( $ );
  • Konstantes var definēt, tikai izmantojot funkciju define(), nevis piešķirot vērtību;
  • Konstantes var definēt un piekļūt jebkurā vietā neatkarīgi no darbības jomas;
  • Konstantes nevar definēt no jauna vai atzīt par nederīgām pēc to sākotnējās deklarēšanas; Un
  • Konstantēm var būt tikai skalāras vērtības.

"Maģiskās" konstantes

PHP nodrošina lielu sarakstu ar iepriekš definētām konstantēm katram jūsu palaistajam skriptam. Daudzas no šīm konstantēm definē dažādi moduļi, un tās būs pieejamas tikai tad, ja šie moduļi būs pieejami, izmantojot dinamisku ielādi vai statisku montāžu.

Ir septiņas maģiskās konstantes, kas maina savu nozīmi atkarībā no konteksta, kurā tās tiek izmantotas. Piemēram, vērtība __LINE__ ir atkarīgs no skripta rindas, kurā ir norādīta šī konstante. Īpašās konstantes nav reģistrjutīgas, un tās ir norādītas tālāk:

Dažas "maģiskās" PHP konstantes
Vārds Apraksts
__LINE__ Pašreizējais rindas numurs failā.
__FILE__ Pašreizējā faila pilns ceļš un nosaukums. Ja to izmanto iekļautā failā, tiek atgriezts šī faila nosaukums. Kopš PHP versijas 4.0.2, __FILE__ vienmēr satur absolūtu ceļu ar atļautām simbolu saitēm, savukārt vecākas versijas noteiktos apstākļos atgrieztu relatīvo ceļu.
__DIR__ Failu direktorijs. Ja tiek izmantots iekļautā failā, tiek atgriezts šī faila direktorijs. Tas ir līdzvērtīgs zvanīšanai dirname (__FILE__). Atgrieztais direktorija nosaukums nebeidzas ar slīpsvītru, izņemot saknes direktoriju (pievienots PHP 5.3.0.)
__FUNCTION__ Funkcijas nosaukums. (Pievienots PHP 4.3.0.) Kopš PHP 5 šī konstante atgriež funkcijas nosaukumu tieši tādu, kāds tas tika deklarēts (reģistrjutīgs). PHP 4 šī vērtība vienmēr bija mazie burti.
__KLASE__ Klases nosaukums. (Pievienots PHP 4.3.0) Kopš PHP 5 šī konstante atgriež klases nosaukumu tieši tādu, kāds tas tika deklarēts (reģistrjutīgs). PHP 4 šī vērtība vienmēr bija mazie burti. Klases nosaukumā ir ietverts tās nosaukumvietas nosaukums, kurā klase tika deklarēta (piemēram, Foo\Bar). Lūdzu, ņemiet vērā, ka kopš PHP5.4 __CLASS__ darbojas arī pazīmēs. Lietojot pazīmju metodēs, __CLASS__ ir tās klases nosaukums, kurā metodes tiek izmantotas.
__TRAIT__ Iezīmes nosaukums. (Pievienots PHP 5.4.0) Kopš PHP 5.4 šī konstante atgriež īpašības nosaukumu tieši tādu, kāds tas tika deklarēts (reģistrjutīgs). Šajā nosaukumā ir ietverta nosaukumvieta, kurā tika deklarēta iezīme (piemēram, Foo\Bar).
__METODE__ Klases metodes nosaukums. (Pievienots PHP 5.0.0) Metodes nosaukums tiek atgriezts tā, kā tas tika deklarēts (reģistrjutīgs).
__NAMESPACE__ Pašreizējās nosaukumvietas nosaukums (reģistrjutīgs). Šī konstante tiek noteikta kompilēšanas laikā (pievienota PHP 5.3.0).
1. piemērs. Pareizi un nepareizi konstantu nosaukumi
// Pareizi konstantu nosaukumi define("FOO", "something"); define("FOO2", "kaut kas cits"); define("FOO_BAR", "kaut kas vairāk"); // Nepareizi konstantu nosaukumi define("2FOO", "something"); // Šī ir derīga deklarācija, taču labāk to neizmantot: // PHP kādu dienu var reģistrēt "maģisko" konstanti //, kas izjauks jūsu skriptu define("__FOO__", "something");