Pemalar global Php. Pemalar dalam PHP. Bagaimanakah saya menggunakan kelas dalaman atau global dalam ruang nama

(PHP 5 >= 5.3.0, PHP 7)

Senarai soalan ini dibahagikan kepada dua bahagian: soalan umum dan beberapa spesifik pelaksanaan yang berguna untuk pemahaman yang lebih lengkap.

Pertama, soalan umum.

  1. Jika saya tidak menggunakan ruang nama, patutkah mana-mana perkara ini dianggap penting?
  2. Bagaimanakah cara saya menggunakan kelas dalaman atau global dalam ruang nama?
  3. Bagaimanakah cara saya menggunakan fungsi kelas dalam ruang nama, atau pemalar dalam ruang nama mereka sendiri?
  4. Macam manalah nama macam tu \nama saya atau \nama ditukar?
  5. Seperti nama seperti nama saya ditukar?
  6. Seperti nama kelas yang tidak layak seperti nama ditukar?
  7. Seperti nama fungsi tidak layak atau nama tetap tidak layak seperti nama ditukar?

Beberapa butiran pelaksanaan ruang nama yang berguna untuk difahami.

  1. Nama yang diimport tidak boleh bercanggah dengan kelas yang ditakrifkan dalam fail yang sama.
  2. Fungsi mahupun pemalar tidak boleh diimport menggunakan pengendali guna.
  3. Nama ruang nama dinamik (pengecam yang disertakan dalam petikan) mesti terlepas daripada aksara sengkang ke belakang.
  4. Anda tidak boleh merujuk kepada pemalar tidak ditentukan menggunakan garis miring ke belakang. Ralat maut dipaparkan
  5. Tidak mustahil untuk mengatasi pemalar khas seperti NULL, TRUE, FALSE, ZEND_THREAD_SAFE atau ZEND_DEBUG_BUILD

Jika saya tidak menggunakan ruang nama, patutkah mana-mana perkara ini dianggap penting?

Tidak. Ruang nama tidak mempunyai kesan ke atas mana-mana kod sedia ada dalam sebarang bentuk atau pada mana-mana kod yang ditulis yang tidak mengandungi ruang nama. Anda boleh menulis kod seperti ini jika anda mahu:

Contoh #1 Mengakses kelas global di luar ruang nama

$a = baru \ stdClass ;
?>

Ini secara fungsional bersamaan dengan yang berikut:

Contoh #2 Mengakses kelas global di luar ruang nama

$a = new stdClass ;
?>

Bagaimanakah cara saya menggunakan kelas dalaman atau global dalam ruang nama?

Contoh #3 Mengakses Kelas Dalaman dalam Ruang Nama

ruang nama foo ;
$a = baru \ stdClass ;

ujian fungsi (\ArrayObject $type hintexample = null ) ()

$a = \ DirectoryIterator :: CURRENT_AS_FILEINFO ;

// lanjutan kelas dalaman atau global
kelas MyException memanjangkan\Exception()
?>

Bagaimanakah cara saya menggunakan fungsi kelas dalam ruang nama atau pemalar dalam ruang nama mereka sendiri?

Contoh #4 Mengakses Kelas Dalaman, Fungsi atau Pemalar dalam Ruang Nama

ruang nama foo ;

kelas MyClass()

// gunakan kelas dari ruang nama semasa
ujian fungsi (MyClass $type hintexample = null ) ()
// cara lain untuk menggunakan kelas daripada ruang nama semasa
ujian fungsi(\foo\MyClass $typehintexample = null)()

// memanjangkan kelas daripada ruang nama semasa
class Extended memanjangkan MyClass()

// akses kepada fungsi global
$a = \globalfunc();

// akses kepada pemalar global
$b = \INI_ALL ;
?>

Macam mana nama macam tu \nama saya atau \nama ditukar?

Nama yang bermula dengan \ sentiasa ditukar kepada rupa mereka, i.e. \nama saya- ini sebenarnya nama saya, Dan \Pengecualian- Ini Pengecualian.

Contoh #5 Nama mutlak

ruang nama foo ;
$a = new \ my \ name (); // mencipta contoh kelas "my\name"
echo\strlen("hai"); // memanggil fungsi "strlen".
$a = \INI_ALL ; // pembolehubah $a diberikan nilai pemalar "INI_ALL"
?>

Seperti nama seperti nama saya ditukar?

Nama yang mengandungi garis miring ke belakang tetapi tidak bermula dengan satu, seperti nama saya

saya nama lain, maka sinonim ini digunakan untuk saya V nama saya.

nama saya.

Contoh #6 Nama penuh

ruang nama foo ;
gunakan bla \ blah sebagai foo ;

$a = new my\name(); // mencipta contoh kelas "foo\my\name"
foo\bar::name(); // memanggil kaedah statik "nama" dalam kelas "blah\blah\bar"
my\bar(); // memanggil fungsi "foo\my\bar"
$a = my\BAR; // memberikan pembolehubah $a nilai pemalar "foo\my\BAR"
?>

Seperti nama kelas yang tidak layak seperti nama ditukar?

Nama kelas yang tidak mengandungi garis miring ke belakang, seperti nama boleh ditukar dengan dua cara yang berbeza.

Jika terdapat ungkapan pengimportan yang mencipta sinonim nama nama lain, maka sinonim ini digunakan.

Jika tidak, nama ruang nama semasa menjadi awalan kepada nama saya.

Contoh #7 Nama kelas tidak layak

ruang nama foo ;
gunakan bla \ blah sebagai foo ;

$a = nama baharu(); // mencipta contoh kelas "foo\name"
foo::nama(); // memanggil kaedah statik "nama" dalam kelas "bla\bla"
?>

Seperti nama fungsi tidak layak atau nama tetap tidak layak seperti nama ditukar?

Nama fungsi atau pemalar yang tidak mengandungi garis miring ke belakang, seperti nama boleh ditukar dengan dua cara yang berbeza.

Pertama, nama ruang nama semasa diberi awalan nama.

Kemudian jika pemalar atau fungsi nama tidak wujud dalam ruang nama semasa, menggunakan pemalar atau fungsi global nama, jika ia wujud.

Contoh #8 Fungsi tidak lengkap atau nama tetap

ruang nama foo ;
gunakan bla \ blah sebagai foo ;

const FOO = 1 ;

fungsi my()()
fungsi foo()()
isihan fungsi (& $a )
{
\sort($a); // memanggil fungsi global "sort"
$a = array_flip($a);
pulangkan $a ;
}

Saya(); // memanggil "foo\my"
$a = strlen("hai"); // memanggil fungsi global "strlen" kerana "foo\strlen" tidak wujud
$arr = tatasusunan(1, 3, 2);
$b = sort($arr); // memanggil fungsi "foo\sort"
$c = foo(); // memanggil fungsi "foo\foo" - import tidak digunakan

$a = FOO ; // memberikan pembolehubah $a nilai pemalar "foo\FOO" - import tidak digunakan
$b = INI_ALL ; // memberikan pembolehubah $b nilai pemalar global "INI_ALL"
?>

Nama yang diimport tidak boleh bercanggah dengan kelas yang ditakrifkan dalam fail yang sama.

Kombinasi skrip berikut adalah sah:

ruang nama\barang saya;
kelas MyClass()
?>

ruang nama lain;
perkara kelas()
?>

ruang nama\barang saya;
sertakan "file1.php" ;
sertakan "satu lagi.php" ;


$a = MyClass baharu ; // mencipta contoh kelas "benda" dari ruang nama "lain"
?>

Tiada konflik nama walaupun kelas Kelas saya wujud di dalam ruang nama barangan saya kerana definisi MyClass berada dalam fail berasingan. Walau bagaimanapun, contoh berikut menghasilkan ralat konflik nama yang membawa maut kerana kelas MyClass ditakrifkan dalam fail yang sama di mana pernyataan penggunaan terletak.

ruang nama\barang saya;
gunakan satu lagi \ benda sebagai MyClass ;
kelas MyClass() // ralat maut: MyClass bercanggah dengan ungkapan import
$a = MyClass baharu ;
?>

Ruang nama bersarang tidak dibenarkan.

PHP tidak membenarkan ruang nama bersarang antara satu sama lain

ruang nama\barang saya(
ruang nama bersarang (
kelas foo()
}
}
?>

Walau bagaimanapun, untuk mensimulasikan ruang nama bersarang seperti ini:

ruang nama saya\barang\bersarang (
kelas foo()
}
?>

Sebelum PHP 5.6, fungsi mahupun pemalar tidak boleh diimport menggunakan operator guna.

Sebelum PHP 5.6 satu-satunya elemen yang dipengaruhi oleh pengendali ialah guna ialah ruang nama dan nama kelas. Untuk memendekkan nama pemalar atau fungsi yang panjang, import kandungannya ke dalam ruang nama.

ruang nama lombong ;
gunakan ultra\long\ns\name;

$a = nama \ CONSTANT ;
nama\func();
?>

Sejak PHP 5.6, ia telah menjadi mungkin untuk mengimport dan mencipta alias untuk fungsi dan nama tetap.

Nama ruang nama dinamik (pengecam yang disertakan dalam petikan) mesti terlepas daripada aksara sengkang ke belakang.

Adalah sangat penting untuk mewakili ini kerana garis miring ke belakang digunakan sebagai watak melarikan diri dalam rentetan. Ia hendaklah sentiasa diduplikasi apabila digunakan dalam rentetan, jika tidak, terdapat risiko akibat yang tidak diingini:

Contoh #9 Perangkap apabila menggunakan nama ruang nama dalam rentetan petikan dua kali

$a = "berbahaya\nama" ; // \n ialah baris baharu dalam rentetan petikan dua!
$obj = baru $a ;

$a = "tidak\sama sekali\berbahaya" ; // tiada masalah di sini.
$obj = baru $a ;
?>

Dalam rentetan petikan tunggal, garis miring ke belakang sebagai pembatas adalah lebih selamat, tetapi amalan yang disyorkan untuk melarikan diri daripada garis miring ke belakang dalam semua rentetan masih merupakan amalan terbaik.

Anda tidak boleh merujuk kepada pemalar tidak ditentukan menggunakan garis miring ke belakang. Ralat maut dipaparkan

Mana-mana pemalar tidak ditentukan yang merupakan nama tidak layak, seperti FOO, akan menghasilkan mesej yang menyatakan bahawa PHP menganggapnya FOO ialah nilai pemalar. Sebarang pemalar, dengan nama yang layak atau mutlak, yang mengandungi aksara sengkang ke belakang akan mengakibatkan ralat maut jika tidak ditemui.

Contoh #10 Pemalar tidak ditentukan

bar ruang nama;
$a = FOO ; // memaparkan amaran: pemalar tidak ditentukan "FOO" dianggap "FOO";
$a = \FOO ; // ralat maut: pemalar ruang nama tidak ditentukan FOO
$a = Bar\FOO; // ralat maut: bar pemalar ruang nama yang tidak ditentukan\Bar\FOO
$a = \Bar \FOO ; // ralat maut: pemalar ruang nama tidak ditentukan Bar\FOO
?>

Tidak mustahil untuk mengatasi pemalar khas seperti NULL, TRUE, FALSE, ZEND_THREAD_SAFE atau ZEND_DEBUG_BUILD

Sebarang percubaan untuk menentukan pemalar ruang nama yang sepadan dengan nama pemalar terbina dalam khas akan mengakibatkan ralat maut.

Contoh #11 Pemalar tidak ditentukan

bar ruang nama;
const NULL = 0 ; // Ralat maut;
const true = "bodoh" ; // juga ralat maut;
// dan lain-lain.
?>

7 tahun lepas

Terdapat cara untuk menentukan pemalar ruang nama yang merupakan pemalar khas terbina dalam, menggunakan fungsi define dan menetapkan parameter ketiga case_insensitive kepada false:

ruang nama foo ;
define (__NAMESPACE__ . "\NULL" , 10 ); // mentakrifkan NULL pemalar dalam ruang nama semasa


?>

Tidak perlu menentukan ruang nama dalam panggilan anda untuk mendefinisikan(), seperti yang biasa berlaku
ruang nama foo ;
define(INI_ALL, "bar"); // menghasilkan notis - Malar INI_ALL sudah ditakrifkan. Tetapi:

Takrifkan (__NAMESPACE__ . "\INI_ALL" , "bar" ); // mentakrifkan pemalar INI_ALL dalam ruang nama semasa
var_dump(INI_ALL); // akan menunjukkan rentetan(3)"bar". Tiada apa-apa yang tidak dilihat setakat ini. Tetapi:

Define("NULL", 10); // mentakrifkan NULL pemalar dalam ruang nama semasa...
var_dump(NULL); // akan menunjukkan 10
var_dump(null); // akan menunjukkan NULL
?>

Jika parameter case_insensitive ditetapkan kepada benar
ruang nama foo ;
define (__NAMESPACE__ . "\NULL" , 10 , true ); // menghasilkan notis - Nol tetap telah ditakrifkan
?>

3 tahun yang lalu

Apabila membuat kelas atau memanggil kaedah statik dari dalam ruang nama menggunakan pembolehubah, anda perlu ingat bahawa mereka memerlukan ruang nama penuh agar kelas yang sesuai digunakan; anda TIDAK BOLEH menggunakan alias atau nama pendek, walaupun ia dipanggil dalam ruang nama yang sama. Mengabaikan mengambil kira perkara ini boleh menyebabkan kod anda menggunakan kelas yang salah, membuang pengecualian kelas yang hilang atau membuang ralat atau amaran.

Dalam kes ini, anda boleh menggunakan pemalar ajaib __NAMESPACE__, atau nyatakan ruang nama penuh dan nama kelas secara langsung. Fungsi class_exists juga memerlukan ruang nama penuh dan nama kelas, dan boleh digunakan untuk memastikan bahawa ralat maut tidak akan dilemparkan kerana kelas yang hilang.

Ruang nama foo ;
Bar kelas(
ujian fungsi statik awam () (
kembali get_called_class();
}
}

ruang nama Foo\Foo;
Bar kelas memanjang \Foo \Bar (
}

Var_dump(Bar::test()); // rentetan(11) "Foo\Foo\Bar"

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

$bar = __NAMESPACE__ . "\Bar" ;
var_dump($bar::test()); // rentetan(11) "Foo\Foo\Bar"

$bar = "Bar" ;
var_dump($bar::test()); // FATAL ERROR: Kelas "Bar" tidak ditemui atau Kelas \Bar yang salah digunakan

Terdapat kes apabila pembolehubah agak menyusahkan untuk digunakan untuk penyimpanan kekal mana-mana nilai tertentu yang tidak berubah semasa operasi program. Nilai sedemikian boleh menjadi pemalar matematik, laluan fail, pelbagai kata laluan, dsb. Hanya untuk tujuan ini, PHP menyediakan pembinaan seperti.

ialah nilai bernama yang tidak berubah semasa pelaksanaan program (skrip).

Dalam PHP, pemalar ditakrifkan oleh fungsi tentukan(). Fungsi ini mempunyai format berikut:

tentukan ($nama, $nilai, $case_sen), Di mana:

$nama- nama pemalar;
$nilai- nilai pemalar;
$case_sen- parameter pilihan jenis logik,
menunjukkan sama ada huruf harus peka huruf besar kecil (benar) atau tidak (salah).

Contoh mentakrif dan menggunakan pemalar dalam PHP:


echo pi ;
// Output 3.14
?>

Jika parameter $case_sen sama benar, maka jurubahasa akan mengambil kira kes aksara apabila bekerja dengan pemalar. Sila ambil perhatian bahawa pemalar digunakan tanpa tanda utama $ .

Perbezaan antara pemalar dan pembolehubah:

    Pemalar tidak mempunyai awalan tanda dolar ( $ );

    Pemalar hanya boleh ditakrifkan menggunakan fungsi tentukan(), bukan dengan memberikan nilai;

    Pemalar boleh ditakrifkan dan diakses di mana-mana tanpa mengambil kira skop;

    Pemalar tidak boleh ditakrifkan atau tidak sah selepas pengisytiharan awalnya;

    Pemalar hanya boleh mempunyai nilai skalar.

Menyemak kewujudan pemalar

Untuk menyemak kewujudan pemalar, anda boleh menggunakan fungsi tersebut ditakrifkan(). Fungsi ini kembali benar, jika pemalar diisytiharkan. Berikut ialah contoh:

// Isytiharkan pi tetap
define ("pi" , 3.14 , true );
jika (ditakrifkan ("pi")== benar ) gema "Pi malar telah diisytiharkan!";
// Skrip akan mencetak "Pi malar diisytiharkan!"
?>

Pemalar Dipratentukan PHP

Pemalar pratakrif berikut wujud dalam PHP:

PHP menyediakan senarai besar pemalar yang dipratentukan untuk setiap skrip yang anda jalankan. Kebanyakan pemalar ini ditakrifkan oleh pelbagai modul dan hanya akan hadir jika modul tersebut tersedia melalui pemuatan dinamik atau melalui pemasangan statik.

Terdapat lima pemalar yang dipratentukan yang mengubah maknanya bergantung pada konteks di mana ia digunakan. Sebagai contoh, pemalar __LINE__ bergantung pada baris dalam skrip yang mana pemalar ini ditentukan. Pemalar khas tidak peka huruf besar-besaran dan disenaraikan di bawah:

Nama Penerangan
__LINE__ Baris semasa dalam fail.
__FAIL__ Laluan penuh dan nama fail semasa.
__DIR__ Direktori fail. Jika digunakan di dalam include, direktori fail yang disertakan dikembalikan. Ini bersamaan dengan diname(__FILE__). Nama direktori ini tidak mempunyai garis miring mengekor melainkan ia adalah direktori akar.
__FUNGSI__ Nama fungsi. (Ditambah dalam PHP 4.3.0.)
__KELAS__ Nama kelas. (Ditambah dalam PHP 4.3.0.)
__SIFAT__ Nama sifat. Nama sifat termasuk ruang nama yang diisytiharkan (cth. Foo\Bar).
__KAEDAH__ Nama kaedah kelas. (Ditambah dalam PHP 5.0.0)
__NAMESPACE__ Nama ruang nama semasa.

Selain itu

Dalam siaran ini, kami akan mengetahui perbezaan dalam mengisytiharkan pemalar PHP menggunakan kata kunci const dan fungsi define().

Pemalar dalam PHP adalah "malar" yang nilainya ditentukan sekali sahaja dan kemudian tidak boleh diubah. Jika anda cuba menukar nilai, ia tidak akan berubah dan nota PHP akan muncul: "Malar sudah ditentukan":

Define("FOO", "val"); define("FOO", "val2"); // Notis: Echo FOO yang telah ditetapkan tetap; //> val

Terdapat dua cara untuk mengisytiharkan pemalar dalam PHP:

// 1 define("NAME", "VALUE"); // 2 const NAME = "VALUE";

Setiap kaedah mempunyai ciri tersendiri, untuk memahaminya, mari kita lihat semuanya langkah demi langkah, bagaimana dan apa yang berubah dengan setiap versi PHP.

Bagaimana untuk mencipta pemalar

PHP kurang daripada 5.3

Sebelum 5.3 dalam PHP, pemalar hanya boleh ditakrifkan menggunakan define() . Kata kunci const muncul dalam versi 5.3.

Hanya skalar boleh menyimpan pemalar. Pembolehubah skalar ialah pembolehubah dengan jenis integer, float, rentetan dan boolean. Jenis tatasusunan, objek dan sumber bukan skalar.

// skalars define("FOO", 10); define("FOO", 10.9); define("FOO", "val"); define("FOO", true); // not scalars define("FOO", array(1)); // pemalar tidak ditetapkan dan kita mendapat Warning define("FOO", (objek) array(1)); // pemalar tidak ditetapkan dan kita mendapat Amaran

Daripada PHP 5.3

Kata kunci const telah muncul dan kini pemalar juga boleh ditakrifkan menggunakannya.

Walau bagaimanapun, anda tidak boleh menentukan pembolehubah, fungsi atau beberapa jenis ungkapan dalam const, tetapi anda mesti lulus skalar "secara langsung":

Const FOO = "val"; // tiada ralat const FOO = $var; // Parse error const FOO = home_url(); // Parse error const FOO = 5 + 10; // Parse error const FOO = "foo"."bar"; // Ralat penghuraian

Manakala untuk define() tiada sekatan sedemikian...

Define("FOO", "val"); // no errors define("FOO", $var); // no errors define("FOO", home_url()); // no errors define("FOO", 5 + 10); // no errors define("FOO", "foo"."bar"); // tiada kesilapan

PHP 5.6

Ia telah menjadi mungkin untuk menentukan ungkapan PHP primitif (ungkapan daripada skalar) sebagai nilai const:

Const FOO = 1 + 2; const FOO = "foo" . "bar";

Ia telah menjadi mungkin untuk menyimpan tatasusunan dalam pemalar:

Const FOO = ; // works define("FOO", ); // tidak berfungsi dalam PHP 5.6, berfungsi dalam PHP 7.0

Perbezaan antara define() dan const

#1 const mesti diisytiharkan dalam skop teratas

Tidak seperti define() , const mesti diisytiharkan di bahagian paling atas skop kerana ia ditakrifkan apabila skrip disusun. Ini bermakna ia tidak boleh diisytiharkan di dalam fungsi/gelung/jika penyataan atau cuba/tangkap blok.

Jika (1) ( const NAME = "VALUE"; // tidak berfungsi ) // tetapi jika (1) ( define("NAME", "VALUE"); // berfungsi )

#2 const sentiasa peka huruf besar-besaran

const sentiasa peka huruf besar-besaran, manakala define() membolehkan anda membuat pemalar tidak peka huruf besar-kecil:

Define("NAME", "VALUE", true); gema NAMA; // VALUE nama gema; // NILAI

#3 const hanya memahami skalar

Ini hanya sah untuk PHP versi 5.6 dan ke bawah...

const tidak boleh dihantar kepada pembolehubah, fungsi, ungkapan, tetapi define() boleh:

Const FOO = $var; // Parse error const FOO = home_url(); // Parse error define("FOO", $var); // no errors define("FOO", home_url()); // tiada kesilapan

#4 const boleh menyimpan tatasusunan sejak PHP 5.6 dan menentukan sejak PHP 7.0

const FOO = ; // berfungsi dalam PHP 5.6 define("FOO", ); // tidak berfungsi dalam PHP 5.6, berfungsi dalam PHP 7.0
Hasil perbandingan

Hampir selalu lebih baik untuk menentukan pemalar menggunakan define() , kerana terdapat lebih banyak kemungkinan dan lebih sedikit pilihan untuk "menangkap" ralat... Pengecualian adalah apabila anda mempunyai PHP 5.6 dan anda perlu menyimpan tatasusunan kepada pemalar, const akan membantu di sini.

Pemalar kelas PHP

Mereka diisytiharkan hanya menggunakan const . Peraturan untuk mereka adalah seperti yang diterangkan di atas: mereka hanya menerima skalar, tidak memahami pembolehubah PHP, fungsi, ungkapan...

Pemalar kelas sentiasa awam - tiada status peribadi atau dilindungi.

Pemalar yang diisytiharkan adalah kepunyaan khusus kepada kelas, ia tidak tergolong dalam mana-mana objek dan biasa kepada semua objek (contoh) kelas.

Kelas My_Class ( const NAME = "VALUE"; // bermula dengan PHP 5.6 anda boleh menggunakan ungkapan matematik const SEC_PER_DAY = 60 * 60 * 24; function print_name() ( // mengakses pemalar kelas di dalam kaedah melalui diri (kelas itu sendiri ) echo self ::NAME; ) ) // akses kepada pemalar di luar kelas // boleh dipanggil dari skop global tanpa memulakan contoh kelas echo My_Class::NAME;

Pemalar kelas sangat serupa dengan sifat kelas statik.

Kelas My_Class ( const NAME = "VALUE"; statik $name = "VALUE";; ) echo My_Class::NAME; echo My_Class::$name;

Pemalar "Magic".

Dan sebagai kesimpulan, mari kita ingat tentang pemalar PHP khas...

PHP mempunyai sembilan pemalar ajaib yang mengubah maknanya bergantung pada konteks di mana ia digunakan. Sebagai contoh, nilai __LINE__ bergantung pada baris dalam skrip yang mana pemalar ini ditentukan. Semua pemalar "ajaib" diselesaikan pada masa penyusunan, tidak seperti pemalar biasa, yang diselesaikan pada masa jalan. Pemalar khas tidak peka huruf besar-besaran dan disenaraikan di bawah:

berterusan Penerangan
__LINE__ Nombor baris semasa dalam fail.
__FAIL__ Laluan penuh dan nama fail semasa di mana pemalar dipanggil.
__DIR__ PHP 5.3.0. Direktori fail di mana pemalar digunakan. Sama seperti diname(__FILE__) . Tidak mempunyai garis miring mengekor, kecuali dalam direktori akar.
__FUNGSI__ Nama fungsi.
__KELAS__ Nama kelas. Nama ini mengandungi nama ruang nama tempat kelas diisytiharkan (contohnya, Foo\Bar). Juga berfungsi dalam sifat. Apabila digunakan dalam kaedah trait, ini ialah nama kelas di mana kaedah ini digunakan.
__SIFAT__ PHP 5.4.0. Nama sifat. Nama ini mengandungi nama ruang nama di mana sifat itu diisytiharkan (contohnya, Foo\Bar).
__KAEDAH__ Nama kaedah kelas.
__NAMESPACE__ PHP 5.3.0. Nama ruang nama semasa.
Nama Kelas::kelas PHP 5.5.0. Nama kelas penuh (termasuk ruang nama). Juga lihat::kelas.

Pemalar- ini adalah nilai yang tidak berubah dari semasa ke semasa. Walaupun dari sekolah, anda mungkin tahu banyak pemalar, contohnya, nombor P, nombor e, pecutan graviti dan lain-lain. Dan, sudah tentu, apabila pengaturcaraan, terdapat juga sangat kerap keperluan untuk masuk pemalar. Dan tentang bagaimana mencipta dan menggunakan pemalar dalam PHP, kita akan membincangkannya dalam artikel ini.

Jom ikut awak mari buat pemalar nombor P:

tentukan(PI, 3.1415926);
echo PI;
?>

Operator tentukan mencipta tetap P.I. dan memberikannya nilai 3.1415926 . Seterusnya kami mengeluarkan pemalar ini melalui pengendali bergema. Segala-galanya sangat mudah, namun, ada satu cadangan yang saya nasihatkan agar anda sentiasa mengikuti. Pastikan anda menulis pemalar dalam huruf besar. Bukannya ini perlu, tetapi sangat diingini. Dan ini adalah kebiasaan bukan sahaja di PHP, tetapi dalam bahasa lain juga.

Sudah tentu, kemudian berubah tetap PI tidak akan dibenarkan (itulah sebabnya dia tetap).

Sekarang mari kita lihat satu fungsi yang menyemak: " Adakah pemalar yang diberikan ditakrifkan?". Mari tulis skrip ini:

jika (!defined("PI")) define(PI, 3.1415926);
echo PI;
?>

Di sini kewujudan pemalar disemak P.I.. Dan jika ia tidak wujud (iaitu define() fungsi dikembalikan salah), maka kita mulakan pemalar ini. Kemudian kami hanya memaparkannya.

Seperti yang anda lihat, buat dan gunakan anda pemalar dalam PHP- ia sangat mudah.

Dan akhirnya, saya ingin bercakap tentang pemalar PHP terbina dalam. Mari tulis skrip mudah:

phpinfo();
?>

Di penghujungnya terdapat bahagian " Pembolehubah PHP“Sebenarnya, ini bukan sepenuhnya pemalar bagaimanapun, mereka adalah pemalar semasa melaksanakan skrip ini. Sudah tentu, apabila skrip lain dilaksanakan, mereka akan mempunyai nilai yang berbeza (tidak semua, sudah tentu). Jom ajak awak keluar sebagai pasangan pemalar, supaya anda memahami cara bekerja dengan mereka, kerana ia digunakan dengan sangat kerap:

echo $_SERVER["REMOTE_ADDR"];
bergema"
";
echo $_SERVER["QUERY_STRING"];
?>

Dalam skrip ini kami keluarkan Alamat IP pengguna, yang melancarkan skrip, dan pada baris seterusnya kami memaparkan rentetan pertanyaan (contohnya, " index.php?id=7"). Melihat ke hadapan sedikit, saya katakan bahawa di sini kita sedang bekerjasama dengan global tatasusunan $_SERVER. Kita akan mengenali tatasusunan kemudian, tetapi saya fikir mereka yang telah bekerja dengan tatasusunan dalam bahasa pengaturcaraan lain akan mengenali sintaks tanpa sebarang masalah. Adapun yang lain pemalar, maka kerja dengan mereka berlaku dengan cara yang sama.

Dalam nota ini kita akan bercakap tentang pemalar. Seperti biasa, mari kita lihat konsep pemalar dalam bahasa pengaturcaraan dan lihat bagaimana ia diisytiharkan dan digunakan pemalar dalam PHP.

Konsep pemalar dan pemalar dalam PHP

Perkataan pemalar sepatutnya sudah biasa kepada anda daripada matematik:

“Pemalar matematik- kuantiti yang nilainya tidak berubah.”

Ia sama dalam PHP. Malar dalam PHP ialah pengecam yang berfungsi untuk menetapkan nilai mudah (rentetan, beberapa nombor) yang tidak boleh berubah semasa pelaksanaan kod.

Untuk mengisytiharkan pemalar (tetapkan nilai kepadanya), gunakan fungsi tentukan. Contoh pengisytiharan berterusan:

Nama tetap dalam PHP adalah sensitif huruf besar dan kecil (huruf besar dan huruf kecil berbeza), jadi anda perlu berhati-hati. Terdapat juga konvensyen bahawa nama tetap sentiasa ditulis dalam huruf besar.

Nama tetap mesti bermula dengan huruf atau garis bawah “_” dan boleh terdiri daripada huruf, nombor dan garis bawah.

Mari kita lihat contoh mudah menggunakan pemalar:

Dalam contoh ini, kami mengisytiharkan pemalar dan menggunakannya dalam program.

Apakah pemalar digunakan dan bukankah lebih mudah untuk menggunakan pembolehubah?

Seperti yang telah disebutkan, pemalar tidak boleh mengubah nilai mereka semasa pelaksanaan program. Pemalar biasanya menyimpan parameter tapak kekal, seperti butiran akses pangkalan data (hos, log masuk dan kata laluan pengguna, nama pangkalan data), lokasi tapak pada cakera dan banyak tetapan lain.

Jika kami menggunakan pembolehubah, skrip mungkin secara tidak sengaja (sekiranya berlaku ralat) menukar nilai pembolehubah dan tidak akan berfungsi seperti yang anda maksudkan.

Menggunakan pemalar memastikan bahawa nilai yang anda tentukan semasa mengisytiharkan pemalar kekal tidak berubah.