
PHP
文章平均质量分 91
魔芋红茶
这个作者很懒,什么都没留下…
展开
-
PHP学习笔记20:预定义接口
PHP学习笔记20:预定义接口图源:php.netTraversable这是一个代表可迭代类型的基本接口,其本身并没有任何方法:interface Traversable {}所以不能直接通过实现该接口来让类具备迭代功能,该接口仅仅用来判断一个类型是否具有迭代能力:<?php//数组$arr = [1, 2, 3];var_dump($arr instanceof Traversable);// bool(false)//生成器function create_gen():原创 2021-12-14 17:18:42 · 606 阅读 · 0 评论 -
PHP学习笔记19:引用
PHP学习笔记19:引用图源:php.net有意思的是,是否支持引用还是指针已经变成了区分编程语言的特征之一。比如:C只支持指针。C++是同时支持引用和指针的。Python不需要明确指定使用引用还是指针,因为Python中所有的变量都是对象,都是引用。Java支持引用,不支持指针。Go lang支持指针,不支持引用。PHP支持引用,不支持指针。关于Python变量的内容,可以阅读Python学习笔记25:再谈变量。所以在谈论php的引用前,我们必须先搞懂什么是指针,什么是引用,原创 2021-12-13 20:57:52 · 761 阅读 · 0 评论 -
PHP学习笔记18:协程
PHP学习笔记18:协程图源:php.net正如Python关于协程的PEP所讲,异步编程和并发已经是编程的一个热门领域,所以无论是老派语言如Python,或者是新语言Go,要么是添加新特性以支持协程,要么是天生就对协程和并发有完整支持。但在这方面php就相当落(la)后(kua)了。或许这和语言的应用领域和使用方式有一些关系,php作为一个和Apache等web service紧密结合的Web开发语言,绝大部分php项目都是依托于web service处理和转发请求的,php本身并不需要花大力气原创 2021-12-11 17:34:43 · 2036 阅读 · 0 评论 -
PHP学习笔记17:迭代器和生成器
PHP学习笔记17:迭代器和生成器图源:php.net迭代器相关概念广泛存在于各种编程语言和设计模式中,这里推荐两篇我的相关文章:Python学习笔记31:迭代技术设计模式 with Python 9:迭代器模式迭代器php中,可以通过实现Iterator接口的方式实现一个迭代器:<?phpclass MyClass implements Iterator{ public function current(): mixed { } public原创 2021-12-10 18:24:41 · 755 阅读 · 0 评论 -
PHP学习笔记16:错误处理
PHP学习笔记16:错误处理图源:php.net在之前的笔记PHP学习笔记6:表达式和运算符中介绍位运算时,提过error_reporting函数。事实上在使用php开发项目时,常需要使用相关的错误处理函数来设置环境,以让不同的环境对错误能进行不同的处理。一般来说,基本原则是在开发环境严格检查错误,并将错误直接输出,这样有利于快速排查错误。而生产和预生产环境需要将错误输出从标准输出屏蔽,因为输出的错误信息可能包含一些敏感信息,这些信息被用户获知可能会影响到系统安全。此外一些不影响系统正常运行的错误信原创 2021-12-10 16:42:05 · 169 阅读 · 0 评论 -
PHP学习笔记15:枚举
PHP学习笔记15:枚举图源:php.net从php 8.0.0开始,php支持枚举类型。简单地说,枚举代表一类有限的数据集,这在计算机领域非常常见,比如说用户类型(管理员,普通用户,VIP等),再比如订单类型(团队订单,个人订单等)。在以前php不支持枚举的时候,我通常会使用类常量:<?phpclass UserType{ const ADMINI = 0; //管理员 const NORMAL = 1; //普通用户 const VIP = 2; //vip原创 2021-12-10 15:14:29 · 2048 阅读 · 0 评论 -
PHP学习笔记14:命名空间
PHP学习笔记14:命名空间图源:php.net在php没有引入命名空间之前,构建比较大的应用时可能会遇到命名冲突的问题,比如:<?php// a.phpclass MyClass{ }<?php// b.phprequire_once './a/a.php';class MyClass{ // PHP Fatal error: Cannot declare class MyClass, because the name is already in us原创 2021-12-09 14:27:26 · 162 阅读 · 0 评论 -
PHP学习笔记13:类和对象 V
PHP学习笔记13:类和对象 V图源:php.netFinal关键字final关键字作用于类,可以让类不能被继承。作用于方法和常量,可以让方法和常量不能被重写。属性不能被声明为final。final的常见用途是在模版方法模式中,将基类的骨架方法声明为final:abstract class Control{ protected bool $need_login = true; protected array $header = []; final public func原创 2021-12-09 12:30:40 · 249 阅读 · 0 评论 -
PHP学习笔记12:类和对象IV
PHP学习笔记12:类和对象IV图源:php.net匿名类匿名类(anonymouse classes)可以用于创建一次性对象,这在大量使用设计模式的框架代码中很常见,比如Java的图形框架。这里用一个精简的图形框架代码进行说明:<?php/** * 鼠标监听事件接口 */interface OnclickListener{ /** * 鼠标点击事件 * @param $mouse 鼠标 * @param $view 图形UI控件原创 2021-12-08 17:18:32 · 231 阅读 · 0 评论 -
PHP学习笔记11:类和对象 III
PHP学习笔记11:类和对象 III图源:php.net继承php可以使用extends关键字让一个类继承另一个类。继承是OOP三大特性之一,目的是可以在良好封装的基础上更好地实现代码复用。php中,子类不能将继承自父类的可读可写属性声明为readonly:<?phpclass Base{ protected string $readWrite;}class Child extends Base{ readonly protected string $readWrit原创 2021-12-07 17:08:22 · 161 阅读 · 0 评论 -
PHP学习笔记10:类和对象 II
PHP学习笔记10:类和对象 II图源:php.net自动加载在现实项目中,我们往往会将类定义单独放在一个php文件中,比如有一个类MyClass,对应的php文件名可能是my_class.cls.php,使用的时候要先使用require或include加载对应的文件。除了手动加载文件以外,php还提供一种自动加载类文件的机制:<?phprequire_once "../../util/class.php";spl_autoload_register(function ($clsNam原创 2021-12-07 11:10:03 · 142 阅读 · 0 评论 -
PHP学习笔记9:类和对象 I
PHP学习笔记9:类和对象 I图源:php.net基本概念定义php的类定义语法与其它语言几乎没有区别:<?phpclass Student{ protected string $name = ""; protected int $age = 0; public function print(): void { echo "Student(name:{$this->name}, age:{$this->age})" . PHP原创 2021-12-06 16:59:29 · 724 阅读 · 0 评论 -
PHP学习笔记8:函数
PHP学习笔记8:函数图源:php.net定义php的函数可以定义在任何地方,甚至是条件语句中:function create_func(int $num){ if ($num<10){ function test(){ echo "test function is called".PHP_EOL; echo "the \$num < 10"; } } else{ f原创 2021-12-05 20:22:48 · 1172 阅读 · 0 评论 -
PHP学习笔记7:控制流
PHP学习笔记7:控制流图源:php.netifphp中常用的if语法与C++或Java中的没有区别:<?php$a = 1;if ($a < 5) { echo "a < 5" . PHP_EOL;} else if ($a == 5) { echo "a == 5" . PHP_EOL;} else { echo "a > 5" . PHP_EOL;}// a < 5其中else if也可以写作elseif,两者几乎没有区别原创 2021-12-05 14:27:47 · 671 阅读 · 0 评论 -
PHP学习笔记6:表达式和运算符
PHP学习笔记6:表达式和运算符图源:php.net表达式php官方手册对表达式的定义是“任何有值的东西”。不同的语言对于表达式的定义是区别很大的,比如Python中很著名的“lamda表达式”,很多人觉得其本质就是个匿名函数,用处不大,这是因为他们不明白匿名函数无法嵌入表达式中使用,而lamda表达式可以。基础数据基础类型的数据本身就是一个表达式:echo 'hello'.PHP_EOL;echo (1).PHP_EOL;// hello// 1需要注意的是,echo 1.PHP_原创 2021-12-04 17:56:20 · 1384 阅读 · 0 评论 -
PHP学习笔记5:常量
PHP学习笔记5:常量图源:php.net语法php常量的基本用途与其它语言类似,即在编译期而非运行期提供一种确定的、不会改变的值:const PROGRAM_VERSION = '1.0.0';const DB_VERSION = '1.0.0';const AUTHOR = 'icexmoon';这些常量通常用于定义软件版本号、作者信息等。按习惯,常量名通常以全大写字母结合_定义。在Go语言是个例外,其变量和常量命名都不推荐使用_,所以常量命名只能是大小写字母的驼峰样式。常量原创 2021-12-03 17:12:41 · 801 阅读 · 0 评论 -
PHP学习笔记4:变量
PHP学习笔记4:变量图源:php.net全局变量php通常会被称作脚本语言,其它的脚本语言还有JavaScript或Python等,脚本语言都有一种特性:无需一个入口函数,逻辑代码和变量声明可以直接在源码文件中编写。在php中,直接在源码文件中而不是函数或者类中定义的变量称作“全局变量”,该变量可以在函数或类外部使用,但无法直接在函数或类内部使用:<?php$number = 0;function use_global(){ echo $number.PHP_EOL;原创 2021-12-03 15:11:38 · 888 阅读 · 0 评论 -
PHP学习笔记3:其它类型和类型声明
PHP学习笔记3:其它类型和类型声明图源:php.netIterable 可迭代对象Iterable是php的一个伪类型,包含数组或者实现了Traversable接口的对象。Iterable类型可以被foreach迭代,也可以和生成器相关的yield from语句一起使用。Iterable可以用于参数类型约束,且进一步通过foreach语句迭代:function do_something(iterable $iter){ foreach($iter as $item){原创 2021-12-01 16:59:34 · 669 阅读 · 0 评论 -
PHP学习笔记2:数组
PHP学习笔记2:数组图源:php.netphp不像其他编程语言那样,有数组、切片、映射、队列、集合等多种数据结构,这些在php中都可以用数组来进行表示。语法定义php的数组由键值对组成,在概念上更像是Go语言的map或者Python的dict:$student = array( "name" => 'Li lei', "age" => 20);键值对由=>组成,并用,间隔,在多行书写时,最后的键值对后可以添加,,也可以不加,前者可以更便于后续继续添加新原创 2021-11-30 15:49:51 · 407 阅读 · 0 评论 -
PHP学习笔记1:基础
PHP学习笔记1:基础图源:php.net虽然一毕业就从事PHP的开发工作,但老实说都是借着以前学习Java或C++的经验来进行开发,从来没有系统性学习过这门语言,现在有空闲,决定系统性学习一下,这个系列笔记将记录相关的学习总结。学习资料方面我查找了一下,不过没有找到合适的书籍,大部分PHP的纸质书出版时间都在2010年前,都是基于PHP5的内容,且相当一部分是向初学者介绍建站基础知识,或者是谈论PHP5的OOP内容,鲜少是谈论PHP语法基础本身的,所以最终我决定查看PHP官方手册来进行学习,这里感原创 2021-11-29 16:31:39 · 522 阅读 · 0 评论 -
CentOS升级PHP到8.0
CentOS升级PHP到8.0图源:php.netWordPress提醒我PHP版本过老(7.2)有一段时间了,索性今天就升级一下。这里的安装过程适用于CentOS 7.X,CentOS 8请参见文末的参考资料。先删除系统中老旧的版本:yum list installed | grep php可能有php本体以及多个插件程序,都一起删除掉:yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-devel.x86_64 ph原创 2021-09-16 10:04:53 · 3881 阅读 · 0 评论 -
PHP新手指南
PHP新手指南本文为PHP新手所写,老鸟请绕道。最近有个优快云的网友咨询了我一些PHP的新手向问题,他说他们老师都是让他们在Apache的网站目录下放PHP代码,然后浏览器运行,觉得这样很麻烦。问可不可以像HTML代码那样所见即所得。其实是完全可以的,虽然PHP的真实工作环境往往是基于LAMP的,即Linux+Apache+MySQL+PHP,是在这一整套环境上工作的。所以,如果你致力于成为一个商业PHP开发者,学习和熟悉这一整套环境是必须的。但是,作为一个PHP新手,主要精力放在熟悉PHP语原创 2021-03-23 11:53:06 · 203 阅读 · 4 评论 -
PHP开发环境(XAMPP+XDebug+VSCode)搭建
PHP开发环境(XAMPP+XDebug+VSCode)搭建XAMPP当年一开始学习PHP的时候就是用的xampp傻瓜式一键安装PHP开发环境,这么多年过去了,这个工具依然好用。这个程序会把apache/PHP/Mysql打包安装,如果你不想折腾的话,强烈建议使用。下载XAMPP的官网是https://www.apachefriends.org/zh_cn/index.html安装包托管网站是https://sourceforge.net/projects/xampp/files/,有各种平原创 2021-03-10 13:14:59 · 2536 阅读 · 10 评论 -
PHP数组性能
最近阅读了PHP数组相关实现原理的文章, 因为是hashTable+链表的形式实现, 所以想用代码具体看一下对性能的影响, 测试了2,3组数据,不太满意, 就不贴出来分析了, 先贴代码, 后续还需要修改测试代码画曲线图来分析说一下测试目的, 一个例子是通过取值来说明PHP数组是通过链表遍历来进行随机访问的,性能和foreach应该差不多(事实说明前者快很多,可能是底层优化过), 第二个例子原创 2013-06-03 19:16:48 · 1101 阅读 · 0 评论 -
RSA签名和验证封装
运行环境:apache+PHP当然,打开PHP的openSSL扩展是必须的,方法请问度娘灵活性考虑,封装为两个类,一个私钥,用于签名,一个公钥,用于验签,2个类都支持从文件加载密钥私钥类:<?php/** * @todo RSA私钥 * @author jixiaolong * */class RSAPrivateKey { private $pri原创 2013-08-02 09:20:12 · 904 阅读 · 0 评论 -
一个标准的结果集类
一个标准的结果集类,主要用作action和业务实体,或者actioin和GUI交互,包含了是否成功,返回数据及可能的错误码和错误信息。还支持转化为json格式。<?php/** * @author jixiaolong * @todo 标准的返回结果类 * */class Result { private $success; private $msg; private $d原创 2013-08-02 23:35:43 · 737 阅读 · 0 评论 -
PHP的静态变量管理
PHP的静态变量需要集中管理,比如一些系统标识或者类型标识。我的一个想法是用类型类来管理。一个类型基类:<?php/** * @author jixiaolong * @todo 类型基类 * */class TypeBase { function __construct() { } /** * */ function __destruct() {原创 2013-08-02 23:30:11 · 604 阅读 · 0 评论 -
PHP时间工具类
<?php/** * @todo 时间工具类 * @author jixiaolong */class TimeTool{ private $week_map; const ONE_SECOND = 1; const ONE_MINUTE = 60; const ONE_HOUR = 3600; const ONE_DAY =86400; //一天的秒钟数24*60*原创 2013-08-02 22:57:55 · 697 阅读 · 0 评论 -
PHP数组类函数
最近在阅读, 已经读到数组处理的章节了, 其中一些比较实用的实例手动实现了一下, 算是做个联系和笔记吧.<?php/** * @author jixiaolong * * */class OAArray { function __construct() { } /** * */ function __destruct() { } /原创 2013-12-19 15:03:52 · 548 阅读 · 0 评论 -
PHP文件异步上传
利用一个js插件实现, 主要阐述一下前台部署代码和后台封装前台JS调用代码 ajaxfileupload({ url : url, secureuri : false, fileElementId : 'excel_orders_file', dataType : 'json', success : function(json,原创 2013-12-26 13:20:09 · 660 阅读 · 0 评论 -
最佳MVC实践
原文地址 http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.best-practices最佳MVC实践(Best MVC Practices)Although Model-View-Controller (MVC) is known by nearly every Web developer, how to properl翻译 2014-04-15 17:50:35 · 1057 阅读 · 1 评论 -
XML报文通信PHP实现的简单阐述
去年中旬的时候做过一个和disa原创 2014-06-11 15:20:50 · 1871 阅读 · 0 评论 -
去过程化
我不知道大多数PHP程序员对PHP的感受如何,就我而言,一开始觉得很酷,灵活快速的开发,随意的数据类型,等等都给我们程序员带来便利。但渐渐的,随着担负起系统的维护性开发工作就发现,之前的各种便利条件都变成一场噩梦。PHP的天生特点决定了它只能是一门披着面向对象外皮的面向过程语言。程序里充斥着大量的面向过程片段。对于重构和代码重用来说,糟透了。之前的某次培训里,公司的一高级经理说,什么是好的代码原创 2012-03-05 12:35:55 · 478 阅读 · 0 评论