Konstanta ajaib. Metode ajaib dan konstanta yang telah ditentukan dalam konstanta global PHP Php




Konstanta adalah pengidentifikasi (nama) dari nilai-nilai sederhana. Dari namanya, mudah untuk melihat bahwa nilainya tidak dapat berubah selama eksekusi skrip (pengecualian adalah konstanta "ajaib", yang sebenarnya bukan konstanta dalam arti sebenarnya). Nama konstanta peka huruf besar-kecil. Secara konvensi, nama konstanta selalu ditulis dalam huruf besar.

Nama konstanta harus mengikuti aturan yang sama dengan nama lain di PHP. Nama yang valid dimulai dengan huruf atau garis bawah dan terdiri dari huruf, angka, dan garis bawah. Ekspresi reguler untuk memeriksa nama konstanta yang benar terlihat seperti ini: *

Komentar: Konsep "huruf" disini adalah karakter a-z, A-Z, dan karakter lainnya dengan kode ASCII dari 127 sampai 255 (0x7f-0xff).

Sintaksis

Anda dapat mendefinisikan konstanta dengan fungsi define() atau dengan kata kunci const di luar deklarasi kelas sejak PHP 5.3.0. Setelah konstanta ditentukan, nilainya tidak dapat diubah atau dibatalkan.

Konstanta hanya dapat berisi data skalar (tipe boolean , integer , float , dan string). Dimungkinkan juga untuk mendefinisikan konstanta bertipe , tetapi ini harus dihindari karena dapat menyebabkan hasil yang tidak diharapkan.

Anda bisa mendapatkan nilai konstanta dengan menentukan namanya. Tidak seperti variabel, Anda tidak dibutuhkan awali nama konstanta dengan karakter $ . Anda juga dapat menggunakan fungsi constant() untuk mendapatkan nilai konstanta jika Anda membuat nama konstanta secara dinamis. Gunakan fungsi get_defined_constants() untuk mendapatkan daftar semua konstanta yang dideklarasikan.

Komentar: Konstanta dan variabel (global) berada di ruang nama yang berbeda. Artinya, misalnya, BENAR dan $TRUE adalah hal yang sangat berbeda.

Jika Anda menggunakan konstanta yang tidak terdefinisi, PHP mengasumsikan bahwa yang Anda maksud adalah nama konstanta itu sendiri, seolah-olah Anda telah menentukan string literal (CONSTANT bukan "CONSTANT"). Ini akan menghasilkan kesalahan level E_NOTICE. Lihat juga bab manual yang menjelaskan mengapa $foo salah (tentu saja, jika Anda tidak mendeklarasikan batang sebagai konstanta dengan define()). Jika Anda hanya ingin memeriksa apakah suatu konstanta didefinisikan, gunakan fungsi defined() .

Perbedaan antara konstanta dan variabel:

  • Konstanta tidak memiliki awalan tanda dolar ( $ );
  • Konstanta hanya dapat didefinisikan menggunakan fungsi define(), bukan dengan memberikan nilai;
  • Konstanta dapat didefinisikan dan diakses di mana saja tanpa memperhatikan ruang lingkup;
  • Konstanta tidak dapat didefinisikan ulang atau dibatalkan setelah deklarasi awal; Dan
  • Konstanta hanya dapat memiliki nilai skalar.

Konstanta "Ajaib".

PHP menyediakan daftar besar konstanta standar untuk setiap skrip yang dijalankan. Banyak dari konstanta ini ditentukan oleh berbagai modul dan hanya akan ada jika modul tersebut tersedia melalui pemuatan dinamis atau melalui build statis.

Ada tujuh konstanta magis yang mengubah artinya tergantung pada konteks penggunaannya. Misalnya nilai __GARIS__ tergantung pada baris dalam skrip di mana konstanta ini ditentukan. Konstanta khusus tidak peka huruf besar/kecil dan tercantum di bawah ini:

Beberapa konstanta PHP "ajaib".
Nama Keterangan
__GARIS__ Nomor baris saat ini dalam file.
__MENGAJUKAN__ Path lengkap dan nama file saat ini. Jika digunakan di dalam file yang disertakan, nama file yang diberikan dikembalikan. Dimulai dengan PHP 4.0.2, __MENGAJUKAN__ selalu berisi jalur absolut dengan symlink diselesaikan, sedangkan versi yang lebih lama mengembalikan jalur relatif dalam beberapa keadaan.
__DIR__ Direktori file. Jika digunakan di dalam file yang disertakan, direktori file tersebut dikembalikan. Ini setara dengan menelepon namadir(__FILE__). Nama direktori yang dikembalikan tidak diakhiri dengan garis miring, kecuali untuk direktori root (Ditambahkan dalam PHP 5.3.0.)
__FUNGSI__ Nama fungsi. (Ditambahkan dalam PHP 4.3.0.) Sejak PHP 5, konstanta ini mengembalikan nama fungsi persis seperti yang dideklarasikan (peka huruf besar-kecil). Di PHP 4 nilai ini selalu dalam huruf kecil.
__KELAS__ Nama kelas. (Ditambahkan dalam PHP 4.3.0) Sejak PHP 5, konstanta ini mengembalikan nama kelas persis seperti yang dideklarasikan (peka huruf besar-kecil). Di PHP 4 nilai ini selalu dalam huruf kecil. Nama kelas berisi nama namespace tempat kelas tersebut dideklarasikan (misalnya, foo\bar). Perhatikan bahwa sejak PHP5.4 __CLASS__ juga berfungsi dalam sifat. Saat digunakan dalam metode sifat, __CLASS__ adalah nama kelas tempat metode tersebut digunakan.
__SIFAT__ Nama sifat. (Ditambahkan dalam PHP 5.4.0) Pada PHP 5.4, konstanta ini mengembalikan nama sifat persis seperti yang dideklarasikan (peka huruf besar-kecil). Nama ini berisi nama namespace tempat sifat tersebut dideklarasikan (misalnya, foo\bar).
__METODE__ Nama metode kelas. (Ditambahkan dalam PHP 5.0.0) Nama metode dikembalikan seperti yang dideklarasikan (peka huruf besar-kecil).
__NAMESPACE__ Nama namespace saat ini (peka huruf besar-kecil). Konstanta ini ditentukan pada waktu kompilasi (Ditambahkan dalam PHP 5.3.0).
Beispiel #1 Nama konstanta yang valid dan tidak valid
// Nama konstanta yang valid define("FOO", "something"); define("FOO2", "sesuatu yang lain"); define("FOO_BAR", "sesuatu yang lebih"); // Nama konstanta tidak valid define("2FOO", "something"); // Ini adalah deklarasi yang valid, tetapi lebih baik tidak menggunakannya: // PHP suatu hari nanti dapat mendaftarkan konstanta "ajaib" // yang akan merusak skrip Anda define("__FOO__", "something");

Variabel adalah entitas yang berisi data. Jika tipe data adalah gambaran umum dari format data yang disimpan dan cara bekerja dengannya, maka variabel tersebut mewakili blok memori komputer tertentu. Toko blok ini nilai variabel, dan Anda dapat merujuk ke blok (dan ke nilainya) dengan nama variabel.


Dalam PHP, nama variabel selalu dimulai dengan tanda dolar ($), diikuti dengan huruf, diikuti dengan huruf, angka, dan garis bawah. Nama peka terhadap huruf besar-kecil, mis. variabel $value, $Value, $VALUE, dan $VaLuE adalah empat variabel yang BERBEDA, meskipun namanya dibaca sama.

Contoh nama variabel yang benar secara sintaksis:

Contoh nama yang tidak valid:

Ada satu aturan umum (untuk semua bahasa pemrograman) mengenai penamaan variabel. Aturannya sangat sederhana: nama harus selalu bermakna.

Contoh kode yang sulit dibaca

Singkatnya, tentu saja, adalah inti dari bakat, tetapi mengorbankan kemudahan persepsi kode demi kekompakannya adalah tidak masuk akal. Selain itu, panjang nama sama sekali tidak memengaruhi kinerja skrip. Tapi jangan ke ekstrim sebaliknya - memberikan nama variabel yang terlalu panjang. Jika nama harus terdiri dari dua kata atau lebih, bagian dari nama harus diawali dengan huruf kapital atau dipisahkan dengan garis bawah. Misalnya, nama $strusernameadndomain jauh lebih baik dalam bentuk $str_UserNameAndDomain.

Contoh kode yang mudah dibaca

Variabel terdiri dari dua jenis: variabel reguler(variabel nilai) dan variabel referensi. Perbedaan utama di antara mereka terletak pada cara data diproses. Saat menetapkan nilai ke variabel biasa, nilai yang ditetapkan sepenuhnya disalin, mis. blok memori baru dibuat, tempat salinan dari nilai asli ditempatkan. Di masa mendatang, semua perubahan akan tercermin pada salinan ini, dan bukan pada data aslinya.

Variabel referensi bekerja secara berbeda. Saat menetapkan nilai ke variabel referensi, bukan data yang disalin, tetapi informasi tentang letaknya. Alhasil, ternyata variabel tersebut menunjuk ke blok yang sama yang berisi data asli. Sekarang jika Anda mengubah nilai variabel referensi, nilai aslinya akan berubah.

Pertimbangkan sebuah contoh:

Melewati variabel berdasarkan nilai

Ada fungsi khusus di PHP untuk bekerja dengan variabel:

  • isset() - memeriksa apakah suatu variabel telah dideklarasikan dan apakah nilainya berbeda dari NULL;
  • kosong() - analog dari isset()
  • unset() adalah fungsi bahasa bawaan yang menghapus nilai variabel dan menghapus variabel itu sendiri dari daftar variabel yang tersedia (menghancurkan variabel).

Lingkup variabel

Karakteristik yang sangat penting dari suatu variabel adalah ruang lingkupnya (scope), yaitu. deskripsi di mana dalam program (skrip) Anda dapat membaca atau mengubah nilainya. Harus selalu diingat bahwa variabel yang dideklarasikan di dalam blok program hanya dapat dilihat di dalam blok ini, dan untuk merujuk ke variabel yang dideklarasikan di luar blok, perlu dideklarasikan dengan cara khusus.

Blok program dalam hal ini adalah "script", "function" atau "class". Misalnya:

Segalanya tampak benar, tetapi tidak berhasil. Mengapa? Karena jika Anda tidak secara eksplisit mengatakan bahwa variabel $name di dalam fungsi sebenarnya adalah variabel global $name, maka juru bahasa akan membuat salinan sementara dari variabel bernama $name dengan nilai kosong. Dan karena nilainya kosong (undefined), maka hasil penambahan string akan menjadi undefined (kosong).

Cara mengatasinya sangat mudah, cukup tambahkan satu baris (dicetak tebal):

global $nama; // secara eksplisit menunjukkan bahwa kita harus // menggunakan variabel global.$nama lengkap = $nama . $keluarga; echo "Nama di dalam fungsi: ".$fullName; ) echo "Nama SEBELUM memanggil fungsi: ".$name; // hasil: "Nama SEBELUM memanggil fungsi: Vasya" tryChengeName(" Ivanov"); // hasil: "Nama di dalam fungsi: Vasya Ivanov" echo "Nama SETELAH pemanggilan fungsi: ".$name; // hasil: "Nama SETELAH memanggil fungsi: Vasya Ivanov" ?>

Dalam contoh ini, variabel $name memiliki cakupan yang sama dengan seluruh skrip, dan variabel $fullName yang dideklarasikan di dalam fungsi memiliki cakupan yang sama dengan fungsi itu sendiri. Ini berarti bahwa ketika fungsinya keluar, variabel $fullName akan dihancurkan, dan semua upaya untuk membaca nilainya akan menghasilkan kesalahan.

Kami akan melihat contoh bekerja dengan kelas di bagian "Kelas dan Warisan".

variabel variabel

Ya, ya, tidak ada kesalahan disini, begitulah (dalam dua kata) beberapa variabel dipanggil di PHP. Intinya adalah bagian teks dari nama variabel (yaitu nama tanpa tanda dolar) itu sendiri bisa menjadi nama. Misalnya:

Sangat tidak disarankan untuk menggunakan teknik seperti itu kecuali benar-benar diperlukan. Kode yang diisi dengan trik seperti itu sangat sulit dipertahankan. Ini sangat penting saat bekerja dengan data yang dimasukkan oleh pengguna. Alasan utama kesulitan ini adalah ketergantungan implisit. Misalnya, apa jadinya jika alih-alih nama "Vasya" Anda menulis sesuatu seperti itu """""_;%//^q""? Benar! Skrip akan gagal dalam banyak kasus! Anda dapat, tentu saja, menambahkan banyak tanda centang untuk keberadaan karakter yang "salah", tetapi lebih mudah untuk tidak menggunakan trik seperti itu sama sekali.

Konstanta

Konstanta adalah nilai yang tidak berubah. Sebuah konstanta dideklarasikan bersamaan dengan nama dan nilai. Fungsi ini digunakan untuk mendeklarasikan suatu konstanta. mendefinisikan(), dan untuk menentukan keberadaan konstanta (yaitu apakah itu didefinisikan atau tidak) - fungsinya didefinisikan(). Nama konstanta dibangun menurut aturan yang sama dengan nama variabel.

Contoh konstan:

Jenis konstanta PHP yang terpisah disebut "konstanta ajaib". Ini adalah konstanta sistem yang nilainya ditentukan dan ditetapkan oleh penafsir. Ada beberapa konstanta seperti itu:

  • __LINE__ Berisi nomor baris saat ini di file saat ini.
  • __FILE__ Berisi nama lengkap dari file saat ini
  • __FUNCTION__ Berisi nama fungsi saat ini.
  • __CLASS__ Berisi nama kelas saat ini.
  • __METHOD__ Berisi nama metode saat ini dari kelas saat ini.

Konstanta ini sangat nyaman untuk debugging, tetapi dalam semua kasus lain lebih baik tidak menggunakannya, menggantinya dengan panggilan ke fungsi yang sesuai.

Halo. Hari ini saya memutuskan untuk menulis tentang konstanta di PHP. Saya akan memberi tahu Anda cara kerja konstanta, mana yang paling sering digunakan dan terjadi.

Apa itu konstanta dalam konteks PHP?

Konstanta pada dasarnya adalah variabel yang nilainya tidak dapat didefinisikan ulang. Artinya, setelah menentukan nilainya, Anda tidak dapat lagi mengubahnya selama eksekusi skrip. Mereka biasanya ditulis dalam huruf besar dan namanya secara khusus mencerminkan informasi yang tersimpan di dalamnya.

Ada 2 macam konstanta dalam PHP:

  1. Biasa (ditentukan oleh programmer)
  2. Telah ditentukan sebelumnya (ditentukan oleh juru bahasa)

Konstanta Biasa

Jenis konstanta ini biasanya digunakan sebagai aturan untuk tujuan layanan dan dibuat oleh pemrogram dalam proses penulisan kode.
Sintaks untuk membuat konstanta biasa adalah:

Tentukan("PI",3.1415);

Pembuatan konstanta terjadi dengan bantuan konstruksi sebaris define("Nama konstanta", "Nilai konstanta").

Untuk menjelaskan secara singkat mekanisme bekerja dengan konstanta, saya akan menunjukkan contoh fakta bahwa nilai dalam konstanta ditetapkan sekali, dan tidak dapat diubah lagi:

Untuk memeriksa keberadaan konstanta, bahasa menyediakan fungsi didefinisikan("CONST_NAME").

Konstanta yang Ditentukan Sebelumnya

Konstanta yang telah ditentukan sebelumnya berbeda dari konstanta biasa dalam cara pembuatannya. Mereka diatur oleh juru bahasa itu sendiri dan mengubah artinya dalam konteks eksekusi program. Mereka juga tidak peka huruf besar-kecil. __KELAS__ atau __kelas__ akan dieksekusi dengan sempurna oleh juru bahasa.

Berikut adalah konstanta standar yang paling sering digunakan:

  • __MENGAJUKAN__- menyimpan nama skrip yang sedang dijalankan.
  • __FUNCTUIN__ adalah nama fungsi saat ini.
  • __KELAS__ adalah nama kelas saat ini.
  • PHP_VERSION- berisi versi juru bahasa PHP.
  • BENAR, PALSU, BATAL- mengandung arti yang sesuai dengan namanya.

Sebagai contoh bagaimana konstanta tersebut bekerja, mari kita lihat penggunaan salah satunya − __FUNGSI__:

Seperti yang Anda lihat dari contoh, konstanta __fungsi__ mengembalikan nama fungsi yang awalnya disebut - abc().

Dan ya, konstanta tidak dapat dihapus seperti variabel biasa oleh suatu fungsi mengatur(), itu ada dari awal hingga akhir eksekusi program.

Itu saja, saya berharap Anda berhasil berlatih dan suasana hati yang baik. Sampai jumpa lagi.

situs web Hak konten dilindungi undang-undang.

PHP memiliki seperangkat konstanta khusus dan metode ajaib untuk proyek Anda. Tidak seperti konstanta biasa, yang dapat diatur dengan define() , arti dari konstanta yang telah ditentukan bergantung pada tempat penggunaannya dan merupakan informasi hanya-baca tentang kode dan sistem PHP. Metode ajaib dapat digunakan di kelas Anda untuk mengakses fungsionalitas PHP khusus.

Dalam tutorial ini, kita akan melihat beberapa konstanta yang telah ditentukan sebelumnya dan metode ajaib dengan contoh kode.

Konstanta yang Ditentukan Sebelumnya

Konstanta yang telah ditentukan sebelumnya digunakan untuk mendapatkan informasi tentang kode Anda. Nama konstanta tersebut dikapitalisasi di antara garis bawah ganda, seperti __LINE__ dan __FILE__ . Berikut adalah beberapa konstanta standar yang berguna yang tersedia di PHP:

  • __LINE__ mengembalikan nomor baris dalam file sumber tempat konstanta digunakan:

  • __FILE__ mewakili nama file, termasuk path lengkap:

  • __DIR__ hanya mewakili jalur file:

  • __CLASS__ mewakili nama kelas saat ini:

  • __FUNCTION__ mewakili nama fungsi saat ini:

  • __METHOD__ mewakili nama metode saat ini:

  • __NAMESPACE__ mewakili nama namespace saat ini:

Metode Sihir

Metode ajaib menyediakan pengait untuk fungsionalitas PHP khusus. Nama mereka ditulis dengan huruf kecil yang diawali dengan dua garis bawah, seperti __construct() dan __destruct() .

Construct() adalah metode ajaib yang dipanggil PHP untuk membuat instance kelas Anda. Dibutuhkan sejumlah argumen.

Destruct() adalah metode ajaib yang dipanggil saat objek dihancurkan oleh kolektor PHP. Metode ini tidak membutuhkan argumen dan biasanya digunakan untuk melakukan operasi khusus, seperti menutup koneksi database.

Beberapa metode ajaib berikutnya adalah untuk manipulasi properti, dan menyediakan cara bagi PHP untuk menangani pemanggilan properti dan metode yang belum ditentukan (atau tidak tersedia).

PHP memanggil metode __get() pada konteks penerima jika properti tidak ditentukan (atau tidak tersedia). Metode mengambil satu argumen - nama properti. Itu harus mengembalikan nilai yang akan diperlakukan sebagai nilai properti.

Metode __set() dipanggil pada properti yang tidak ditentukan dalam konteks pengaturan. Metode ini membutuhkan dua argumen, nama properti dan nilai.

myAarray[$prop] = $nilai; ) fungsi publik __get($prop) ( return $this->myArray[$prop]; ) fungsi publik __isset($prop) ( return isset($this->myArray[$prop]); ) fungsi publik __unset($prop ) ( unset($this->myArray[$prop]); ) fungsi publik __toString() ( return __CLASS__ . ":". $this->name; ) ) $obj = new MySample(); if (!isset($obj->nama)) ( $obj->nama = "Alireza"; ) echo $obj->nama; // Alireza echo $obj; // Sampel Saya: Alireza

Pada kode di atas, properti name tidak didefinisikan di kelas. Kode mencoba menyetel properti ini ke "Alireza" dan PHP memanggil metode ajaib __set() . Ia menerima "name" sebagai argumen $prop dan "Alireza" sebagai $value , dan menyimpan nilai dalam array pribadi $myArray . Metode __get() bekerja dengan cara yang sama. Ketika $obj->name ditampilkan, metode __get() dipanggil dan nilai "nama" diteruskan sebagai argumen $prop.

Ada metode ajaib lain yang membantu memanipulasi properti yang tidak dapat dijangkau, seperti pada contoh di atas: __isset() , __unset() , dan __toString() . Baik metode __isset() dan __unset() diaktifkan oleh fungsi dengan nama yang sama tetapi tanpa garis bawah di PHP.

Isset() memeriksa apakah properti disetel atau tidak. Metode ini membutuhkan satu argumen - properti yang akan diperiksa. Metode __unset() mengambil satu argumen, nama properti yang akan diatur ulang.

Dalam banyak kasus lebih mudah untuk merepresentasikan objek sebagai string, misalnya, untuk keluaran ke pengguna atau proses lain. Biasanya, PHP mewakili objek sebagai pengidentifikasi dalam memori, yang buruk untuk fungsi tersebut. Metode __toString() membantu merepresentasikan objek sebagai string. Metode dijalankan dalam banyak situasi di mana objek digunakan sebagai string, seperti echo "Hello $obj" . Itu juga dapat dipanggil secara langsung seperti metode publik lainnya.

Ada kasus ketika agak merepotkan menggunakan variabel untuk menyimpan secara permanen beberapa nilai tertentu yang tidak berubah selama program berjalan. Nilai tersebut dapat berupa konstanta matematika, jalur file, berbagai kata sandi, dll. Hanya untuk tujuan ini, PHP menyediakan konstruksi seperti.

nilai bernama dipanggil, yang tidak berubah selama eksekusi program (skrip).

Di PHP, konstanta ditentukan oleh fungsi mendefinisikan(). Fungsi ini memiliki format berikut:

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

$nama- nama konstanta;
$nilai- nilai konstanta;
$case_sen- parameter tipe boolean opsional,
apakah akan case-sensitive (benar) atau tidak (salah).

Contoh mendefinisikan dan menggunakan konstanta di PHP:


gema pi ;
// Keluaran 3.14
?>

Jika parameternya $case_sen sama BENAR, maka penafsir akan peka huruf besar kecil ketika berhadapan dengan konstanta. Perhatikan bahwa konstanta digunakan tanpa awalan $ .

Perbedaan antara konstanta dan variabel:

    Konstanta tidak memiliki awalan tanda dolar ( $ );

    Konstanta hanya dapat ditentukan dengan menggunakan fungsi mendefinisikan(), bukan dengan menetapkan nilai;

    Konstanta dapat didefinisikan dan diakses di mana saja tanpa memperhatikan ruang lingkup;

    Konstanta tidak dapat ditentukan atau dibatalkan setelah deklarasi awal;

    Konstanta hanya dapat memiliki nilai skalar.

Memeriksa Keberadaan Konstanta

Untuk memeriksa keberadaan konstanta, Anda dapat menggunakan fungsi didefinisikan(). Fungsi ini kembali BENAR, jika konstanta dideklarasikan. Berikut contohnya:

// Deklarasikan konstanta pi
define("pi" , 3.14 , true );
jika (didefinisikan("pi" )== true ) gema "Pi konstan dinyatakan!";
// Skrip akan menampilkan "Pi konstan dinyatakan!"
?>

Konstanta Standar PHP

PHP memiliki konstanta standar berikut:

PHP menyediakan daftar besar konstanta standar untuk setiap skrip yang dijalankan. Banyak dari konstanta ini ditentukan oleh berbagai modul dan hanya akan ada jika modul tersebut tersedia melalui pemuatan dinamis atau melalui build statis.

Ada lima konstanta yang telah ditentukan sebelumnya yang mengubah artinya tergantung pada konteks di mana mereka digunakan. Misalnya konstanta __GARIS__ tergantung pada baris dalam skrip di mana konstanta ini ditentukan. Konstanta khusus tidak peka huruf besar/kecil dan tercantum di bawah ini:

Nama Keterangan
__GARIS__ Baris saat ini dalam file.
__MENGAJUKAN__ Path lengkap dan nama file saat ini.
__DIR__ Direktori file. Jika digunakan di dalam penyertaan, direktori file yang disertakan dikembalikan. Ini sama dengan dirname(__FILE__). Nama direktori ini tidak memiliki garis miring kecuali direktori root.
__FUNGSI__ Nama fungsi. (Ditambahkan dalam PHP 4.3.0.)
__KELAS__ Nama kelas. (Ditambahkan dalam PHP 4.3.0.)
__SIFAT__ Nama sifat. Nama sifat mencakup namespace tempat ia dideklarasikan (mis. Foo\Bar).
__METODE__ Nama metode kelas. (Ditambahkan dalam PHP 5.0.0)
__NAMESPACE__ Nama namespace saat ini.

Selain itu