cari
Rumahpembangunan bahagian belakangtutorial phpPHP对象的引用及对象优化策略

当PHP5的出现面向对象思想,我们在构造PHP程序时候就有了对程序的新的总结,把对象特性封装到类,特别是当PHP框架应用到实际项目中,构造类的对象和调用类对象出现了很大的讲究。

我们很多时候会发现,我们在写一些程序的时候,期望只要第一次构造了该对象,以后操作就是直接对该对象进行其他动作的操作,其实,每个类在构造一个对象后都是可以实现对象对方法或属性的调用,这是面向对象最为基本的做法。但是如果你研究了一些框架集合后,特别是应用到MVC模式下的框架开发程序,你会发现一个Controller里面会有很多个action,也就是我们所说的控制器里的方法有很多,当然你也会发现当一个控制器控制一个事务对象操作的时候,里面会出现很多次构造对象,操作数据集合的动作,但是你也会发现如果每次都是靠NEW方式去构造对象的话,无疑就是一次次给自己的内存空间增加负担。因为构造一个新的对象无疑就是要分配一个新的内存空间给它,但是如果你其实只是要求同一个对象动作的延续,那么试图寻找已经构造好的对象,并调用它无疑是个很不错的想法。所谓,同一对象的动作的延续,这个问题其实也很好解释,比如我现在构造一个控制器类为Controller A,里面是对数据Model A的一个添加,删除等操作,那么我们的控制动作就会存在假设为action Add ,actionDelete ,按照常规,我们通常利用框架集的单点入口原理,通过路由分配器程序找到了Controller A,但是里面会如果要单独调用actionAdd或,actionDelete ,且两个动作都是对Model A进行的数据操作,每次操作按照常规都必须构造数据对象,然后调用SQL去执行数据库操作,假设构造两个动作都要去操作同一个数据对象时候调用的方法时候都是在使用同一个语句$a=new A()这种形式的话,两次操作其实就产生了两个对象,也就同时占用两倍的内存空间,试想不过就是要求同一个人去实施两个动作,有必要两个人分别去做两件事情么,显然这种条件下是等于资源浪费,而且当动作多了的时候就会出现大量对象资源占用内存严重导致系统性能下降,最终严重的就导致崩溃。

其实,我们在写很多程序的时候也都一再强调,技术完成功能只是最基础的一部分,一个好的程序或是网站,要研究的不仅仅是功能问题,更重要的是整体性能,特别是对于大型讲究效用的程序来说性能是非常重要的。这点上框架集合是非常不错的典范,它们善于合理使用地址引用。让如果能一个对象处理的事情,就让一个对象来处理,把足够的空间留给其他不同的类别的对象。

框架集合解决对象资源是否重用的最好的方法就是全局变量的使用,当你的对象建立存在的时候,一般是第一次建立时候,就把它装载到全局变量中,我们也可以叫做注册对象,所以以后考虑对象调用方法的时候就直接去Check全局变量中是该类对象,也就是说看其是否注册了该对象,如果存在就直接返回该类对象,并告知地址,以便引用。这样以来是很容易实现对象地址引用的。当建立所有对象变量指向同一内存空间的时候,我们说此刻他们只是名字不同,实际是同一对象。

于是,我们可以建立了这样的程序代码如下:

<?php
$GLOBALS[&#39;objects&#39;][&#39;classname&#39;]=null; //是否注册类,类名变量
$GLOBALS[&#39;objects&#39;][&#39;obj&#39;]=null; //对象变量
function & getSingle($classname){
if($GLOBALS[&#39;objects&#39;][&#39;classname&#39;]==$classname){
return $GLOBALS[&#39;objects&#39;][&#39;obj&#39;];
}else
{
$object= new $classname();
$GLOBALS[&#39;objects&#39;][&#39;classname&#39;]=$classname;
$GLOBALS[&#39;objects&#39;][&#39;obj&#39;]=&$object;
return $GLOBALS[&#39;objects&#39;][&#39;obj&#39;];
}
}
class Test{
var $p1;
function Test(){
$this->p1=1;
}
function add()
{
$this->p1++;
}
function show()
{
return $this->p1;
}
}
$test1=&getSingle(&#39;Test&#39;);
$test1->add();
$test2=&getSingle(&#39;Test&#39;);
echo $test2->show();
$test2->add();
$test3=&getSingle(&#39;Test&#39;);
echo $test3->show();
if($test1===$test2)
echo &#39;yes&#39;;
else
echo &#39;no&#39;;
?>

根据第一次建立对象后,第二次调用读取数据时候的必然是以原对象为基础的再操作,可以由后面的程序看到$test2去数据时候结果是2,然后进行add操作后,由$test3再读取时候发现结果为3显然是因为动作2完成的效果。由此,我们看到了利用同一对象进行分步操作的好处所在,在这里是因为我们将代码放在了一起,当然我们在使用框架的使用经常会出现这样的情况就是将上面的$test1,$test2,$test3以及他们的动作分别放在同一个控制器的不同动作action中,因为动作块是相互独立的,因此,三个对象变量谁先谁后触发最早建立这个对象内存空间都是随机而定的。第一次先是检测全局变量中是否注册了该对象,并检查对象地址是否存储在全局变量中,以后就是对该对象地址进行比对和存取。


Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tujuan PHP: Membina Laman Web DinamikTujuan PHP: Membina Laman Web DinamikApr 15, 2025 am 12:18 AM

PHP digunakan untuk membina laman web dinamik, dan fungsi terasnya termasuk: 1. Menjana kandungan dinamik dan menghasilkan laman web secara real time dengan menyambung dengan pangkalan data; 2. Proses Interaksi Pengguna dan Penyerahan Bentuk, Sahkan Input dan Menanggapi Operasi; 3. Menguruskan sesi dan pengesahan pengguna untuk memberikan pengalaman yang diperibadikan; 4. Mengoptimumkan prestasi dan ikuti amalan terbaik untuk meningkatkan kecekapan dan keselamatan laman web.

PHP: Pengendalian pangkalan data dan logik sisi pelayanPHP: Pengendalian pangkalan data dan logik sisi pelayanApr 15, 2025 am 12:15 AM

PHP menggunakan sambungan MySQLI dan PDO untuk berinteraksi dalam operasi pangkalan data dan pemprosesan logik sisi pelayan, dan memproses logik sisi pelayan melalui fungsi seperti pengurusan sesi. 1) Gunakan MySQLI atau PDO untuk menyambung ke pangkalan data dan laksanakan pertanyaan SQL. 2) Mengendalikan permintaan HTTP dan status pengguna melalui pengurusan sesi dan fungsi lain. 3) Gunakan urus niaga untuk memastikan atomik operasi pangkalan data. 4) Mencegah suntikan SQL, gunakan pengendalian pengecualian dan sambungan penutup untuk debugging. 5) Mengoptimumkan prestasi melalui pengindeksan dan cache, tulis kod yang sangat mudah dibaca dan lakukan pengendalian ralat.

Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Bagaimana anda menghalang suntikan SQL di PHP? (Penyataan yang disediakan, PDO)Apr 15, 2025 am 12:15 AM

Menggunakan penyataan preprocessing dan PDO dalam PHP secara berkesan dapat mencegah serangan suntikan SQL. 1) Gunakan PDO untuk menyambung ke pangkalan data dan tetapkan mod ralat. 2) Buat kenyataan pra -proses melalui kaedah menyediakan dan lulus data menggunakan ruang letak dan laksanakan kaedah. 3) Hasil pertanyaan proses dan pastikan keselamatan dan prestasi kod.

PHP dan Python: Contoh dan perbandingan kodPHP dan Python: Contoh dan perbandingan kodApr 15, 2025 am 12:07 AM

PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyataPHP dalam Tindakan: Contoh dan aplikasi dunia nyataApr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP: Membuat kandungan web interaktif dengan mudahPHP: Membuat kandungan web interaktif dengan mudahApr 14, 2025 am 12:15 AM

PHP menjadikannya mudah untuk membuat kandungan web interaktif. 1) Secara dinamik menjana kandungan dengan memasukkan HTML dan paparkannya dalam masa nyata berdasarkan input pengguna atau data pangkalan data. 2) Penyerahan borang proses dan menjana output dinamik untuk memastikan bahawa htmlspecialchars digunakan untuk mencegah XSS. 3) Gunakan MySQL untuk membuat sistem pendaftaran pengguna, dan gunakan kata laluan dan preprocessing untuk meningkatkan keselamatan. Menguasai teknik ini akan meningkatkan kecekapan pembangunan web.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popularPHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popularApr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Relevannya PHP: Adakah ia masih hidup?Relevannya PHP: Adakah ia masih hidup?Apr 14, 2025 am 12:12 AM

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular