Hasil pertanyaan Eloquent akan kembali IlluminateDatabaseEloquentCollection
,而使用 collect()
会返回 IlluminateSupportCollection
. Selain itu, dalam dokumentasi Laravel, terdapat maklumat berikut:
Kebanyakan koleksi Eloquent mengembalikan contoh "Koleksi Eloquent" baharu, tetapi kaedah pluck, kunci, zip, runtuh, rata dan flip mengembalikan contoh koleksi asas.
Sehubungan itu, jika operasi peta mengembalikan koleksi yang tidak mengandungi sebarang model Eloquent, ia akan ditukar secara automatik kepada koleksi asas.
Jadi, apakah perbezaan antara kedua-dua Koleksi ini, atau "Koleksi Asas" dan "Koleksi Eloquent"?
Melihat kod sumber, kita boleh melihat
Dalam erti kata lain,
IlluminateDatabaseEloquentCollection
ialah subkelasIlluminateSupportCollection
.IlluminateDatabaseEloquentCollection
是IlluminateSupportCollection
的子类。你说的这几个方法,在
IlluminateDatabaseEloquentCollection
中是这样定义的,以pluck
为例。而这里用到的
toBase
函数在IlluminateDatabaseEloquentCollection
中没有定义,而是在IlluminateSupportCollection
中定义了。那么在子类中没有重写的方法,就会调用父类的方法。我们看看toBase
在IlluminateSupportCollection
中是如何定义的。看吧,是返回了
new self($this)
,一个新的实例。由于这是在父类中的,自然返回的实例是IlluminateSupportCollection
了。IlluminateSupportCollection
中的pluck
定义是这样的。而在
IlluminateSupportArr
中pluck
的定义是这样的。返回的是一个数组。
Kaedah yang anda nyatakan ditakrifkan seperti ini dalam这样
IlluminateSupportCollection
中的new static(Arr::pluck)
,意思就是新建一个类的实例(new self
和new static
IlluminateDatabaseEloquentCollection
, ambilpluck
sebagai contoh.rrreee
FungsitoBase
yang digunakan di sini tidak ditakrifkan dalamIlluminateDatabaseEloquentCollection
, tetapi ditakrifkan dalamIlluminateSupportCollection
. Kemudian jika tiada kaedah yang ditindih dalam subkelas, kaedah kelas induk akan dipanggil. Mari kita lihat bagaimanatoBase
ditakrifkan dalamIlluminateSupportCollection
. 🎜 rrreee 🎜Lihat,new self($this)
dikembalikan, contoh baharu. Memandangkan ini berada dalam kelas induk, contoh yang dikembalikan secara semula jadi ialahIlluminateSupportCollection
. Takrifanpluck
dalamIlluminateSupportCollection
adalah seperti ini. 🎜 rrreee 🎜Takrifanpluck
dalamIlluminateSupportArr
adalah seperti ini. 🎜 rrreee 🎜Apa yang dikembalikan ialah array.Dengan cara ini,
statik baharu(Arr::pluck)
dalamIlluminateSupportCollection
bermaksud mencipta contoh baharu kelas (diri baharu
danstatik baharu
boleh didapati di https://www.laravist.com/blog/post/php-new-static-and-new-self). 🎜 🎜Bagaimana pula, adakah anda faham sekarang? 🎜