Bagaimana saya bisa mendefinisikan konstanta di dalam kelas, dan membuatnya jadi hanya terlihat ketika dipanggil dalam konteks kelas?
....sesuatu seperti Foo::app()->MYCONSTANT;
(dan jika dipanggil suka MYCONSTANT
diabaikan)
Bagaimana saya bisa mendefinisikan konstanta di dalam kelas, dan membuatnya jadi hanya terlihat ketika dipanggil dalam konteks kelas?
....sesuatu seperti Foo::app()->MYCONSTANT;
(dan jika dipanggil suka MYCONSTANT
diabaikan)
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"
(is_null(self::$staticVariable) === true) && (isset($value) === true)
akan jauh lebih ringkas seperti self::$staticVariable === null && $value !== null
. $value
akan selalu disetel di dalam fungsi, jadi tidak perlu digunakan isset
. 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:
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.
Info selengkapnya di sini
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 melalui BAR
.
Untuk mencapai sintaks seperti ini Foo::baz()->BAR
, Anda perlu mengembalikan objek dari fungsi baz()
kelas Foo
yang memiliki properti BAR
. 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:
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:
Foo::app()->MYCONSTANT();
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
atau protected
).
Cara lainnya adalah dengan mendefinisikan konstanta Anda sebagai private
atau protected
dan 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.
Penghargaan: http://dwellupper.io/post/48/defining-class-constants-in-php