classMyClass{
const MYCONSTANT = 'constant value';
functionshowConstant() {
echoself::MYCONSTANT. "\n";
}
}
echo MyClass::MYCONSTANT. "\n";
$classname = "MyClass";
echo$classname::MYCONSTANT. "\n"; // As of PHP 5.3.0$class = new MyClass();
$class->showConstant();
echo$class::MYCONSTANT."\n"; // As of PHP 5.3.0
Dalam hal ini bergema MYCONSTANTdengan sendirinya akan meningkatkan pemberitahuan tentang konstan terdefinisi dan output konstan nama dikonversi ke string: "MYCONSTANT".
tetapi tidak berhasil untuk mendefinisikannya di dalam fungsi kelas :(
Alex
@Alex: Tidak, tidak (AFAIK, mungkin ada cara yang tidak jelas).
Alix Axel
3
(is_null(self::$staticVariable) === true) && (isset($value) === true)akan jauh lebih ringkas seperti self::$staticVariable === null && $value !== null. $valueakan selalu disetel di dalam fungsi, jadi tidak perlu digunakan isset. Dan hiper-eksplisit === truetidak menambahkan apa pun.
menipu
1
Apakah kita pernah melakukan percakapan ini sebelumnya? Tidak dapat menahannya, saya hanya sangat tidak menyukai gaya itu. ;-D
menipu
@deceze: Ya. Saya sangat terbiasa dengan gaya ini dan itu berhasil untuk saya jadi saya akan tetap menggunakannya, tetapi Anda juga benar. =)
Alix Axel
24
Ini dan pertanyaan lama, tapi sekarang di PHP 7.1 Anda dapat mendefinisikan visibilitas konstan.
CONTOH
<?phpclassFoo{
// As of PHP 7.1.0publicconst BAR = 'bar';
privateconst BAZ = 'baz';
}
echo Foo::BAR . PHP_EOL;
echo Foo::BAZ . PHP_EOL;
?>
Output dari contoh di atas dalam PHP 7.1:
batang
Kesalahan fatal: Kesalahan Tidak Tertangkap: Tidak dapat mengakses const pribadi Foo :: BAZ di…
Catatan:
Mulai PHP 7.1.0, pengubah visibilitas diizinkan untuk konstanta kelas.
Ini adalah satu-satunya cara untuk membuat konstanta kelas . Konstanta ini selalu dapat diakses secara global melalui Foo::BAR, tetapi tidak dapat diakses hanya melalui BAR.
Untuk mencapai sintaks seperti ini Foo::baz()->BAR, Anda perlu mengembalikan objek dari fungsi baz()kelas Fooyang memiliki propertiBAR . Itu tidak konstan. Setiap konstan Anda mendefinisikan selalu global dapat diakses dari mana saja dan tidak dapat dibatasi untuk hasil fungsi panggilan.
Ini pertanyaan yang cukup lama, tapi mungkin jawaban ini masih bisa membantu orang lain.
Anda dapat meniru konstanta publik yang dibatasi dalam ruang lingkup kelas dengan menerapkan kata kunci terakhir ke metode yang mengembalikan nilai yang telah ditentukan sebelumnya, seperti ini:
classFoo{
// This is a private constantfinalpublic MYCONSTANT()
{
return'MYCONSTANT_VALUE';
}
}
Kata kunci terakhir pada sebuah metode mencegah kelas yang diperluas untuk mendefinisikan kembali metode tersebut. Anda juga dapat menempatkan kata kunci terakhir di depan deklarasi kelas, dalam hal ini kata kunci tersebut mencegah Warisan kelas.
Untuk mendapatkan hampir persis apa yang Alex cari, kode berikut dapat digunakan:
Anda dapat mendefinisikan sebuah konstanta kelas di php. Tetapi konstanta kelas Anda juga dapat diakses dari instance objek apa pun. Ini adalah fungsi php. Namun, mulai dari php7.1 , Anda dapat mendefinisikan konstanta kelas Anda dengan pengubah akses ( public, privateatau protected).
Cara lainnya adalah dengan mendefinisikan konstanta Anda sebagai privateatau protecteddan kemudian membuatnya dapat dibaca melalui a static function. Fungsi ini seharusnya hanya mengembalikan nilai konstan jika dipanggil dari konteks statis.
Anda juga dapat membuat fungsi statis ini di kelas induk Anda dan hanya mewarisi kelas induk ini di semua kelas lain untuk menjadikannya fungsionalitas default.
Jawaban:
Lihat Konstanta Kelas :
class MyClass { const MYCONSTANT = 'constant value'; function showConstant() { echo self::MYCONSTANT. "\n"; } } echo MyClass::MYCONSTANT. "\n"; $classname = "MyClass"; echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0 $class = new MyClass(); $class->showConstant(); echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0
Dalam hal ini bergema
MYCONSTANT
dengan sendirinya akan meningkatkan pemberitahuan tentang konstan terdefinisi dan output konstan nama dikonversi ke string:"MYCONSTANT"
.EDIT - Mungkin yang Anda cari adalah properti / variabel statis ini :
class MyClass { private static $staticVariable = null; public static function showStaticVariable($value = null) { if ((is_null(self::$staticVariable) === true) && (isset($value) === true)) { self::$staticVariable = $value; } return self::$staticVariable; } } MyClass::showStaticVariable(); // null MyClass::showStaticVariable('constant value'); // "constant value" MyClass::showStaticVariable('other constant value?'); // "constant value" MyClass::showStaticVariable(); // "constant value"
sumber
(is_null(self::$staticVariable) === true) && (isset($value) === true)
akan jauh lebih ringkas sepertiself::$staticVariable === null && $value !== null
.$value
akan selalu disetel di dalam fungsi, jadi tidak perlu digunakanisset
. Dan hiper-eksplisit=== true
tidak menambahkan apa pun.Ini dan pertanyaan lama, tapi sekarang di PHP 7.1 Anda dapat mendefinisikan visibilitas konstan.
CONTOH
<?php class Foo { // As of PHP 7.1.0 public const BAR = 'bar'; private const BAZ = 'baz'; } echo Foo::BAR . PHP_EOL; echo Foo::BAZ . PHP_EOL; ?>
Output dari contoh di atas dalam PHP 7.1:
Info selengkapnya di sini
sumber
class Foo { const BAR = 'baz'; } echo Foo::BAR;
Ini adalah satu-satunya cara untuk membuat konstanta kelas . Konstanta ini selalu dapat diakses secara global melalui
Foo::BAR
, tetapi tidak dapat diakses hanya melaluiBAR
.Untuk mencapai sintaks seperti ini
Foo::baz()->BAR
, Anda perlu mengembalikan objek dari fungsibaz()
kelasFoo
yang memiliki propertiBAR
. Itu tidak konstan. Setiap konstan Anda mendefinisikan selalu global dapat diakses dari mana saja dan tidak dapat dibatasi untuk hasil fungsi panggilan.sumber
Ini pertanyaan yang cukup lama, tapi mungkin jawaban ini masih bisa membantu orang lain.
Anda dapat meniru konstanta publik yang dibatasi dalam ruang lingkup kelas dengan menerapkan kata kunci terakhir ke metode yang mengembalikan nilai yang telah ditentukan sebelumnya, seperti ini:
class Foo { // This is a private constant final public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } }
Kata kunci terakhir pada sebuah metode mencegah kelas yang diperluas untuk mendefinisikan kembali metode tersebut. Anda juga dapat menempatkan kata kunci terakhir di depan deklarasi kelas, dalam hal ini kata kunci tersebut mencegah Warisan kelas.
Untuk mendapatkan hampir persis apa yang Alex cari, kode berikut dapat digunakan:
final class Constants { public MYCONSTANT() { return 'MYCONSTANT_VALUE'; } } class Foo { static public app() { return new Constants(); } }
Nilai konstanta yang diemulasi akan dapat diakses seperti ini:
sumber
Anda dapat mendefinisikan sebuah konstanta kelas di php. Tetapi konstanta kelas Anda juga dapat diakses dari instance objek apa pun. Ini adalah fungsi php. Namun, mulai dari php7.1 , Anda dapat mendefinisikan konstanta kelas Anda dengan pengubah akses (
public
,private
atauprotected
).Cara lainnya adalah dengan mendefinisikan konstanta Anda sebagai
private
atauprotected
dan kemudian membuatnya dapat dibaca melalui astatic function
. Fungsi ini seharusnya hanya mengembalikan nilai konstan jika dipanggil dari konteks statis.Anda juga dapat membuat fungsi statis ini di kelas induk Anda dan hanya mewarisi kelas induk ini di semua kelas lain untuk menjadikannya fungsionalitas default.
Penghargaan: http://dwellupper.io/post/48/defining-class-constants-in-php
sumber