java - PHP5的类实例变量的声明问题
<code>private $db = new Db();</code>
如上,在php5的类中,如果直接声明一个实例变量,就会报类声明错误
改成下面这样就可以
<code>private $db = null; public function __construct(){ $this->db = new Db(); }</code>
非得先声明一个空值,再用方法赋值,搞的常常写出来查半天发现没bug,才明白原来是语法要求。
不明白是基于什么考虑,我理解,可能是php5学习面象对象学的还不完善,所以有很多问题,大伙聊聊。
补问:PHP7还是这样吗?
鸟哥,求撸 @Laruence
.
回复内容:
<code>private $db = new Db();</code>
如上,在php5的类中,如果直接声明一个实例变量,就会报类声明错误
改成下面这样就可以
<code>private $db = null; public function __construct(){ $this->db = new Db(); }</code>
非得先声明一个空值,再用方法赋值,搞的常常写出来查半天发现没bug,才明白原来是语法要求。
不明白是基于什么考虑,我理解,可能是php5学习面象对象学的还不完善,所以有很多问题,大伙聊聊。
补问:PHP7还是这样吗?
鸟哥,求撸 @Laruence
.
因为如果允许
<code>private $db = new Db();</code>
这样的语法,那么,文件被加载后,Db类就被初始化了。
请注意,是A类被载入内存,Db类就被实例化了。
而如果Db类也用了同样的语法,那么可能你include一个文件,就会很慢,因为include的同时,就在进行一系列的类实例化行为。
而禁用这种特性,只允许在类构造方法中实例化其他类,就能很好的控制类实例化的流程了。加载类时,永远不会产生附带的类实例化。
无论对于系统的优化,还是对于程序运行时间的掌控,可预测、可控的,才是好的、可持续的。
PHP暂时未提供对对象属性直接赋值对象的支持,对象的赋值暂时只能通过构造函数来实现。
当然,你不能说php要向java去学习面向对象,也没有谁规定java才是面向对象的标杆,如果php真的样样都和java一样了,那它干嘛还叫php呢。
补答:PHP7依然是这样。
class的直接赋值只能是 标量 (数值,字符串,数组,布尔)
谢谢邀请。楼上回答就很到位
都是大神 在函数外面直接实例化类没做过,但是你的第二种写法两个db不是同一个变量吧

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.
