热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP的学习-PHP源码

ec(2);PHP的学习学习使用了阵子PHP,PHP开发速度应该是不错的,相同的项目PHP的代码量估计要比用JSP要少很多。但是在使用过程中也发现一些问题,也看了一些别人PHP项目代码,说下一下感受.1.PHP灵活但不能涂鸦一般使用.如果把数据库操作都写在一个页面上,维护就吃力了.至少要把数据库操作跟页面渲染分离开,类似JSP加JavaBean的方式,相信这也是PHP

PHP的学习

学习使用了阵子PHP,PHP开发速度应该是不错的,相同的项目PHP的代码量估计要比用JSP要少很多。
但是在使用过程中也发现一些问题,也看了一些别人PHP项目代码,说下一下感受.

1. PHP灵活但不能涂鸦一般使用.
如果把数据库操作都写在一个页面上,维护就吃力了.至少要把数据库操作跟页面渲染分离开,类似JSP
加JavaBean的方式,相信这也是PHPer采用的简单MVC.

2.PHP常量
PHP array的array的读写都很灵活,可能页面会经常有这样的
echo $myArray[''myKey''];数据库操作mysql_fetch_array返回的row也是,万一key值''myKey''开发的
时候没定义好,又或''myKey''是列名,突然要改了,这个常量每个文件都有的话,改起代码来就郁闷了.
PHP会使用define,类里面会使用const来代表常量
define(''MY_CONSTANT'', ''MY_VALUE'');
echo MY_CONSTANT;
class MyClass{
const MY_COnSTANT= ''MY_VALUE'';
public function test(){
echo self::MY_CONSTANT;
}
}
//External usage
echo MyClass::MY_CONSTANT;

3.=号赋值拷贝
=大多情况下是拷贝的形式的赋值.
$oldValue = array(1,2,3);
$newValue = $oldValue;
$newValue[] = 4;
echo $oldValue;//1,2,3
echo $newValue;//1,2,3,4
可以看到$newValue只是值拷贝,它的修改不会改变$oldValue.估计class实例的赋值也是拷贝。

还有什么会导致拷贝,function的入参,和return返回值应该也是默认是值拷贝传递.
function test($param) {
echo $param;//string
$param = ''newstring'';
echo $param;//newstring
}
$strParam = ''string'';
test($strParam);
echo $strParam;//string

foreach迭代array的时候可能导致拷贝
$myArray = array(''key1''=>''value1'',''key2''=>''value2'');
foreach($myArray as $key=>$value) {
echo "$key=$value
";
}
按照PHP手册的说法就是foreach的时候是拷贝了一个新的array,即使在循环中修改了值,对旧array没影响.

=号对于clone好像是不算是拷贝?

个人感觉不太喜欢拷贝,如果拷贝的东西比较大,估计会影响执行效率了吧.

4. 使用reference引用避免拷贝
其实就是使用=& 引用其实是别名Alias,觉得这个就是java,c#类默认使用的,PHP必须显式加个&,有点像
c++.
$oldValue = array(1,2,3);
$newValue = &$oldValue;
$newValue[] = 4;
echo $oldValue;//1,2,3,4
echo $newValue;//1,2,3,4

PHP4里面$myClassInstance = new MyClass();其实是一种拷贝, 必须
$myClassInstance = &new MyClass();
PHP5里面就支持好多了默认new出来的东西就是PHP4里面的&new引用。

入参如果数据大(假设是一个大数组)可以传递引用避免值拷贝
function test(&$param) {
echo $param;//string
$param = ''newstring'';
echo $param;//newstring
}
$strParam = ''string'';
test($strParam);
echo $strP
推荐阅读
  • 数据库锁的分类和应用
    本文介绍了数据库锁的分类和应用,包括并发控制中的读-读、写-写、读-写/写-读操作的问题,以及不同的锁类型和粒度分类。同时还介绍了死锁的产生和避免方法,并详细解释了MVCC的原理以及如何解决幻读的问题。最后,给出了一些使用数据库锁的实际场景和建议。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
author-avatar
逍遥子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有