PHP 反射详解 面向对象编程中对象被赋予了自省的能力,而这个自省的过程就是反射。反射,直观理解就是根据到达地找到出发地和来源。比如,一个光秃秃的对象,我们可以仅仅通过这个对象就能知道它所属的类、拥有哪些方法。反射是指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。如何使用反射API 如何使用反射 API class person { public $name; public $gender; public function say(){ echo $this->name," \tis ",$this->gender,"\r\n"; } public function set($name, $value) { echo "Setting $name to $value \r\n"; $this->$name= $value; } public function get($name) { if(!isset($this->$name)){ echo ‘未设置’; $this->$name="正在为你设置默认值"; } return $this->$name; } } $student = new person(); $student->name = ‘Tom’; $student->gender = ‘male’; $student->age = 24; 现在,要获取这个student对象的方法和属性列表该怎么做呢? // 获取对象属性列表 $reflect = new ReflectionObject($student); $props = $reflect->getProperties(); foreach ($props as $prop) { print $prop->getName() ."\n"; } // 获取对象方法列表 $m = $reflect->getMethods(); foreach ($m as $prop) { print $prop->getName() ."\n"; } 也可以不用反射API,使用class函数,返回对象属性的关联数组以及更多的信息: // 返回对象属性的关联数组 var_dump(get_object_vars($student)); // 类属性 var_dump(get_class_vars(get_class($student))); // …
PHP 数组 简介 这些函数允许你通过不同的方式来使用和操作数组。数组是存储、管理和操作变量组的必不可少的工具。 PHP 支持简单数组和多维数组,数组可由用户自己创建也可以由其它函数创建。有很多特殊的数据库处理函数可以从数据库查询中返回数组以及一些返回数组的函数。 预定义常量 下列常量作为 PHP 核心的一部分总是可用的。 CASE_LOWER (integer) CASE_LOWER 用在 array_change_key_case() 中将数组的键名转换成小写字母。这也是 array_change_key_case() 的默认值。 CASE_UPPER (integer) CASE_UPPER 用在 array_change_key_case() 中将数组的键名转换成大写字母。排序顺序标识: SORT_ASC (integer) SORT_ASC 用在 array_multisort() 函数中,使其升序排列。 SORT_DESC (integer) SORT_DESC 用在 array_multisort() 函数中,使其降序排列。 排序类型标识:用于各种排序函数 SORT_REGULAR (integer) SORT_REGULAR 用于对对象进行通常比较。 SORT_NUMERIC (integer) SORT_NUMERIC 用于对对象进行数值比较。 SORT_STRING (integer) SORT_STRING 用于对对象进行字符串比较。 SORT_LOCALE_STRING (integer) SORT_LOCALE_STRING 基于当前区域来对对象进行字符串比较。PHP 4.4.0 和 5.0.2 新加。 COUNT_NORMAL (integer) COUNT_RECURSIVE (integer) EXTR_OVERWRITE (integer) EXTR_SKIP (integer) EXTR_PREFIX_SAME (integer) EXTR_PREFIX_ALL (integer) EXTR_PREFIX_INVALID (integer) EXTR_PREFIX_IF_EXISTS (integer) EXTR_IF_EXISTS (integer) EXTR_REFS (integer) 对数组进行排序 PHP 有一些用来排序数组的函数 主要区别有: 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array[‘key’] = ‘value’;。 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 …)。 排序的顺序有:字母表顺序, 由低到高(升序), 由高到低(降序),数字排序,自然排序,随机顺序或者用户自定义排序。 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。 函数名称 排序依据 …
已发布! PHP 8.3 是 PHP 语言的主版本更新。它包含了许多新功能, 它包含了许多新功能,例如:类常量显式类型、只读属性深拷贝,以及对随机性功能的补充。一如既往,它还包括性能改进、错误修复和常规清理等。 类型化类常量 RFC PHP < 8.3 interface I { // We may naively assume that the PHP constant is always a string. const PHP = ‘PHP 8.2’; } class Foo implements I { // But implementing classes may define it as an array. const PHP = []; } PHP 8.3 interface I { const string PHP = ‘PHP 8.3’; } class Foo implements I { const string PHP = []; }// Fatal error: Cannot use array as value for class constant // Foo::PHP of type string 动态获取类常量 RFC PHP < 8.3 class Foo { …
简介 MacOS下PHP开发的集成环境MAMP(收费)、XAMPP(不够灵活);Brew安装(不够灵活)phpstudy(不够成熟) Docker安装 官网:https://hub.docker.com/ 下载安装 前期准备 1、新建目录docker-php(可自定义)2、在docker-php中新建nginx目录和www目录3、在nginx目录中新建conf和logs目录 在docker-php/nginx/conf目录创建文件php.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ .php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /web/$fastcgi_script_name; include fastcgi_params; } } 编写docker-compose72.yml文件和docker-compose56.yml文件 一定注意格式,且文件存放在docker-php目录下 # docker-compose72.yml: version: "2.3" services: nginx: image: nginx privileged: true ports: – "80:80" volumes: – /Users/{电脑用户名}/docker-php/www/web:/usr/share/nginx/html – /Users/{电脑用户名}/docker-php/nginx/conf:/etc/nginx/conf.d – /Users/{电脑用户名}/docker-php/nginx/logs:/var/log/nginx networks: – web-net php: image: phpdockerio/php72-fpm privileged: true volumes: – /Users/{电脑用户名}/docker-php/www/web:/web networks: – web-net mysql: hostname: mysql image: mysql:5.7.26 ports: – "3306:3306" environment: – MYSQL_ROOT_PASSWORD=root networks: …
phpstorm设置thinkphp风格文件头部注释、方法注释、函数注释 一、文件头部注释: 设置路径:PhpStorm->Preferences…->Editor->File and Code Templates 如图 设置ThinkPHP风格文件头 // +———————————————————————- // | [ WE CAN DO IT MORE SIMPLE ] // +———————————————————————- // | Copyright (c) 2018-2020 rights reserved. // +———————————————————————- // | Author: 高效码农 // +———————————————————————- // | Date: ${DATE} ${TIME} // +———————————————————————- 效果展示 二、方法注释设置: 设置路径:PhpStorm->Preferences…->Editor->File and Code Templates 如图 设置方法注释举例 /** ${PARAM_DOC} #if (${TYPE_HINT} != "void") * @return ${TYPE_HINT} #end ${THROWS_DOC} Author: 高效码农 Date: ${DATE} ${TIME} */ 效果展示: