public class MyClass {
}
Di Java, kita bisa mendapatkan nama kelas dengan String className = MyClass.class.getSimpleName();
Bagaimana melakukan ini di PHP? Saya sudah tahu get_class()
, tetapi ini hanya berfungsi untuk objek. Saat ini saya bekerja di Active Record. Saya butuh pernyataan seperti MyClass::className
.
public $__CLASS__ = __CLASS__;
tarian dengan setiap kelas lainnya ...Jawaban:
Sejak PHP 5.5 Anda dapat menggunakan resolusi nama kelas melalui ClassName :: class .
Lihat fitur baru PHP5.5 .
Jika Anda ingin menggunakan fitur ini dalam metode kelas Anda, gunakan static :: class :
Untuk versi PHP yang lebih lama , Anda dapat menggunakan get_class () .
sumber
static::class
danget_class_name()
?static::class
diselesaikan selama waktu kompilasi sementaraget_class_name()
diinterpretasikan selama runtime. Saya menemukan hal ini dengan mencoba untuk mengakses :: kelas properti dari kelas yang dihasilkan secara dinamis dan mendapatkan error berikut (?):Dynamic class names are not allowed in compile-time ::class fetch
. Lihat jawaban ini untuk lebih jelasnya. Saya juga menemukan bahwa catatan dari dokumen ini bermanfaat.Anda dapat menggunakan
__CLASS__
dalam kelas untuk mendapatkan nama tersebut.http://php.net/manual/en/language.constants.predefined.php
sumber
get_class($this)
,static::class
) hanya mengembalikan nama kelas anak (yang memperluas induk).self::class
, juga, tampaknya untuk mengembalikan nama kelas induk.Sepertinya Anda menjawab pertanyaan Anda sendiri.
get_class
akan memberimu nama kelas. Itu prosedural dan mungkin itulah yang menyebabkan kebingungan. Lihat dokumentasi php untukget_class
Inilah contoh mereka:
Untuk membuatnya lebih seperti contoh Anda, Anda dapat melakukan sesuatu seperti:
Sekarang Anda dapat melakukan:
Ini agak terbatas, bagaimanapun, karena jika kelas saya diperpanjang, itu masih akan mengembalikan 'Kelas Saya'.
get_called_class
Sebagai gantinya, kita dapat menggunakan , yang mengandalkan Late Static Binding , fitur yang relatif baru, dan membutuhkan PHP> = 5.3.sumber
Sekarang, saya punya jawaban untuk masalah saya. Terima kasih kepada Brad untuk tautannya, saya menemukan jawabannya di sini . Dan terima kasih kepada J.Money untuk idenya. Solusi saya:
sumber
FooBar::getClassName()
selalu'FooBar'
. Jika Anda bisa mengetikProduct::getClassName()
- Anda juga bisa mengetik'Product'
.Untuk mendapatkan nama kelas Anda bisa menggunakan ReflectionClass
sumber
Sepertinya
ReflectionClass
ini adalah opsi yang cukup produktif.Tolok ukur:
sumber
Menurut saya penting untuk menyebutkan sedikit perbedaan antara 'self' dan 'static' dalam PHP karena 'jawaban terbaik' menggunakan 'statis' yang dapat memberikan hasil yang membingungkan bagi sebagian orang.
Hasil:
sumber
end(preg_split("#(\\\\|\\/)#", Class_Name::class))
Class_Name::class
: kembalikan kelas dengan namespace. Jadi setelah anda hanya perlu membuat sebuah array, selanjutnya dapatkan nilai terakhir dari array tersebut.sumber
untuk versi lebih lama dari PHP 5.5
sumber
sumber