0

0

PHP对象的引用及对象优化策略

高洛峰

高洛峰

发布时间:2016-10-17 11:12:10

|

1471人浏览过

|

来源于php中文网

原创

当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全局变量中是该类对象,也就是说看其是否注册了该对象,如果存在就直接返回该类对象,并告知地址,以便引用。这样以来是很容易实现对象地址引用的。当建立所有对象变量指向同一内存空间的时候,我们说此刻他们只是名字不同,实际是同一对象。

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

citySHOP多用户商城系统
citySHOP多用户商城系统

citySHOP是一款集CMS、网店、商品、分类信息、论坛等为一体的城市多用户商城系统,已完美整合目前流行的Discuz! 6.0论坛,采用最新的5.0版PHP+MYSQL技术。面向对象的数据库连接机制,缓存及80%静态化处理,使它能最大程度减轻服务器负担,为您节约建设成本。多级店铺区分及联盟商户地图标注,实体店与虚拟完美结合。个性化的店铺系统,会员后台一体化管理。后台登陆初始网站密匙:LOVES

下载

立即学习PHP免费学习笔记(深入)”;

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

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


相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

307

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

183

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

29

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

103

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

54

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

764

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

92

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

JSON与AJAX原理与实战
JSON与AJAX原理与实战

共5课时 | 0.8万人学习

ThinkPHP开发大型商城项目实战视频
ThinkPHP开发大型商城项目实战视频

共54课时 | 21.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号