现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇

0818b9ca8b590ca3270a3433284dd417.png

最近计划把 PHP手册,认真的先过一遍。记录一些以前不知道,不明确的知识。

语言参考 > 类型

【新认知】强制转换类型用 settype( mixed $var, string $type )。判断变量的类型用is_type函数。例如:

if (is_int($an_int)) {

$an_int += 4;

}

if (is_string($a_bool)) {

echo "String: $a_bool";

}

判断变量

is_array( mixed $var )

is_bool( mixed $var )

is_float( mixed $var )

is_integer( mixed $var )

is_null( mixed $var )

is_numeric( mixed $var ) //检测变量是否为数字或数字字符串

is_object( mixed $var )

is_resource( mixed $var )

is_scalar( mixed $var ) //检测变量是否是一个标量 integer、float、string 或 boolean

is_string( mixed $var )

判断函数和方法

function_exists( string $function_name )

method_exists( mixed $object, string $method_name ) // 判断类的方法

Boolean 布尔类型

【遇到坑】(string) '0.00' 被认为是 True,且不为空

$str = '0.00';

$ret = !empty($str) ? $str : '5.00';

echo $ret;

//output:0.00

【遇到坑】当字符串 与 数字比较时,会被转换为数字之后进行比较

//将all转换为数字时候为0

var_dump(0 == 'all'); // TRUE, take care

Integer 整型

【新认知】整型的最大值可以用常量 PHP_INT_MAX 表示

【新认知】PHP 没有像 C++ / JAVA 的整除运算,类似 1 / 2,PHP 返回 float 0.5

【旧回顾】转换为整型可以用(int) 或者 (integer) 强制转换。或者通过函数 intval() 来转换。

Float 浮点型

【新认知】比较浮点数的方法

$a = 1.23456789

$b = 1.23456780

$epsilon = 0.00001

if (abs($a - $b) < $epsilon) {

echo 'true';

}

String 字符串

【新认知】使用函数 ord() 和 chr() 实现 ASCII 码和字符间的转换(PS:这点和 Python 是一样的)

【新认知】 PHP 中没有单独的“byte”类型,已经用字符串来代替了。

Array 数组

【新认知】 unset()函数允许删除数组中的某个键,但是数组的键不会重新索引。可以使用 array_values() 函数重新索引。

【遇到坑】避免数组 $foo[bar] 的写法,使用 $foo['bar']

【新认知】如果一个object类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个'*'做前缀。这些前缀的前后都各有一个 NULL 字符。

class A {

private $A; // This will become '\0A\0A'

}

class B extends A {

private $A; // This will become '\0B\0A'

public $AA; // This will become 'AA'

}

var_dump((array) new B());

?>

【新认知】 在循环中改变单元,可以用个引用传递来做到

// PHP 5

foreach ($colors as &$color) {

$color = strtoupper($color);

}

unset($color); /* ensure that following writes to

类型转换

【新认知】转换为NULL类型,(unset) $val

【新认知】将字符串文字和变量转换为二进制字符串 (PS:和想象中不一样)

$binary = (binary)$string;

$binary = b"binary string";

语言参考 > 变量

变量范围

【旧回顾】 使用global,$GLOBALS 来实现全局变量或者超全局变量

【新认知】 静态变量只能简单赋值,不能是表达式。静态变量第一次赋值之后不会再被重新定义,可以用于递归函数的计数。

function test()

{

static $count = 0;

$count++;

echo $count;

if ($count < 10) {

test();

}

$count--;

}

?>

来自PHP外的变量

【新认知】变量名中的点和空格被转换成下划线 例如 变成 $_REQUEST["a_b"]

语言参考 > 流程控制

foreach

【新认知】用list()为嵌套数组解包

$array = [

[1, 2],

[3, 4],

];

foreach ($array as list($a, $b)) {

// $a contains the first element of the nested array,

// and $b contains the second element.

echo "A: $a; B: $b\n";

}

?>

break

【新认知】break 可以接受一个可选的数字参数来决定跳出几重循环。break 相当于 break 1

continue

【新认知】continue 可以接受一个可选的数字参数来决定跳到几重循环结尾。continue 相当于 continue 1

语言参考 > 常量

魔术常量

【新认知】原来这些变量叫做 魔法常量

__LINE __

__FILE__

__DIR__

__FUNCTION__

__CLASS__

__TARIT__

__MRTHOD__

__NAMESPACE__

语言参考 > 类与对象

基本概念

【新认知】::class, 使用ClassName::class 可以获得一个字符串,包含命名空间

namespace NS {

class ClassName {

}

echo ClassName::class;

}

?>

//output: NS\ClassName

类常量

【新认知】接口中可以定义常量

【新认知】可以用一个变量来动态调用类,但该变量的值不能为关键词(self, parent, static)。

魔术方法

【新认知】不能在__toString() 方法中抛出异常,这样会出现致命错误。

类型约束

【新认知】PHP5 可以使用类型约束,函数的参数可以制定必须为 对象,接口,数组,callable

后期静态绑定

【新认知】后期静态绑定,static:: 不再被解析为定义在当前方法所在的类,而是在实际运行时计算。

class A {

public static function who() {

echo __CLASS__;

}

public static function test() {

static::who(); // 后期静态绑定从这里开始

}

}

class B extends A {

public static function who() {

echo __CLASS__;

}

}

B::test();

?>

//output: B

语言参考 > 生成器

【新认知】生成器汗水的核心是yield关键字。它最简单的调用形式看起来像一个return声明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码而且只是暂时执行生成器代码

function gen_one_to_three() {

for ($i = 1; $i <= 3; $i++) {

//注意变量$i的值在不同的yield之间是保持传递的。

yield $i;

}

}

$generator = gen_one_to_three();

foreach ($generator as $value) {

echo "$value\n";

}

?>

1

2

3

语言参考 > 预定义变量

超全局变量

$GLOBALS

$_SERVER

$_GET

$_POST

$_FILES

$_REQUEST

$_SESSION

$_ENV

$_COOKIE

$php_errormsg //前一个错误信息

$HTTP_RAW_POST_DATA //原始POST数据

$http_response_header //HTTP Response Header

$argc //argument numbers

$argv //argument array

以上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb连接失败_mongodb 数据库及数据分页

本文转载于 SegmentFault 社区作者&#xff1a;小小蚊子在做自己的一个小项目时&#xff0c;新学习了 mongodb非关系型数据库&#xff0c;使用了 mongoose封装好的查询方法&#xff0c;包括数据库分页用到的limit和 skip 方法&#xff0c;这里记录下。一mongodb 数据库连接参照…

python 去除空格和换行,删除空格和换行符-BeautifulSoup Python

使用Beautifulsoup&#xff0c;我正在抓取以下Web源&#xff1a;Manchester Citys Fabian Delph limped off in the first minute of England Euro 2016 qualifier against Switzerland with a suspected hamstring injury. The 25-year-old midfielder, who signed for City f…

Windows MobileCE 开发书籍大全

1、《Microsoft Windows CE 程序设计》 北京大学出版社[美]Doudlas Boling 著该书可以与经典著作《Microsoft Windows 程序设计》相媲美&#xff0c;就象要想在Window平台上开发&#xff0c;必看 《Microsoft Windows 程序设计》一样&#xff0c;如果你想在Windows CE平台上开发…

python自动答题助手_GitHub - SmileSmith/autoAnswer: 客户端答题工具,集成3个答题助手,包含AI自动答题,手动答题,adb控制多台手机等...

autoAnswer和简单搜索、汪仔助手、UC答题助手一起答题。支持AI自动答题&#xff0c;支持个性化题。注&#xff1a;近期各个答题助手都升级了安全策略&#xff0c;如有问题请随时反馈 ~ ~**AI自动答题的详细流程说明请打开(见图)AI自动答题的结果预览(见图)答题界面见预览&#…

php ajax json post请求参数传递,javascript - ajax post 有个请求参数要用json 但请问js怎么转json的?...

$.ajax({url: linkAndBindUrl,method: post,data: {key: "web",toKen: toKen,memberId: memberId,json:, //[{"id":1,"appellation":"爸爸"},{"id":2,"appellation":"爷爷"}],beMemberId: beMemberId},…

创建数据类的原则

转载于:https://www.cnblogs.com/ghostbox/archive/2009/08/03/2251083.html

mysql 关联查询_Mysql查询优化器,再也不会因为该什么时候建立索引发愁了

优化器的作用&#xff1a;我们知道&#xff0c;一条SQL语句&#xff0c;可以有很多执行方式&#xff0c;最后都返回相同的结果&#xff0c;而优化器的作用就是找到最好的执行计划。一、RBO-基于规则的优化器(rule)系统内置的一套硬编码规则&#xff0c;根据规则生成执行计划&am…

购物车的收货地址js php,Javascript实现购物车功能的详细代码

我们肯定都很熟悉商品购物车这一功能&#xff0c;每当我们在某宝某东上购买商品的时候&#xff0c;看中了哪件商品&#xff0c;就会加入购物车中&#xff0c;最后结算。购物车这一功能&#xff0c;方便消费者对商品进行管理&#xff0c;可以添加商品&#xff0c;删除商品&#…

CLI下的网页浏览器之二——Lynx

出自&#xff1a;http://vb2005xu.javaeye.com/blog/230044 Lynx浏览器使用指南 Lynx是一个字符界面下的全功能的WWW浏览器。Lynx 可以运行在很多种操作系统下&#xff0c;如VMS, UNIX, Windows 95, Windows NT等&#xff0c;当然也包括Linux。 由于没有漂亮的图形界面&#xf…

python中减法运算函数_详解 Python 的二元算术运算,为什么说减法只是语法糖?...

原题| Unravelling binary arithmetic operations in Python作者| Brett Cannon译者| 豌豆花下猫(“Python猫”公众号作者)声明| 本翻译是出于交流学习的目的&#xff0c;基于 CC BY-NC-SA 4.0 授权协议。为便于阅读&#xff0c;内容略有改动。大家对我解读属性访问的博客文章反…

【SQL】DQL语句影响行数不能超过XX值

mysql执行临时查看添加limit 10 查询 select * from msg_info cc WHERE DATE_FORMAT(cc.CREATE_DATE,%Y%m%d) 20231127;> 1025 - [xx_dql_where]DQL语句需要增加where条件;[xx_dql_explain]DQL语句影响行数不能超过20000,当前值180906; > 时间: 0.021s处理 select * …

Oracle访问同义词连接超时,利用同义词解决oracle用户访问其它schema的对象

由于应用需要&#xff0c;aa能访问bb的所有表。SQL> create user aa identified by oracle;User created.SQL> grant connect,resource to aa;Grant succeeded.SQL> create user bb identified by oracle;User created.SQL> grant connect,resource to bb;Grant su…

一个不错的讲解flex 3中自定义事件的文章

一个不错的讲解flex 3中自定义事件的文章 http://wangyisong.javaeye.com/blog/376118&#xff0c;一个不错的讲解flex 3中自定义事件的文章posted on 2009-08-08 17:41 jackyrong的世界 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/jackyrong/archive/2009…

oracle同义,oracle同义词

搞了几天数据同步的程序&#xff0c;写完之后觉得很浪费&#xff0c;因为oracle自身的数据库联机备份功能已经相当强大。不过关键一点是我们应用场景跟联机备份有很大差别。虽然这次没用上oracle自身备份功能&#xff0c;但是有一个通过建立db link 来实现同步倒也很简单&#…

stm32 整数加法循环时间_【教学设计】小数加法教学设计

小数加法教学设计刘秀锦舞钢市特殊教育学校教材分析本节课是第四单元“小数加减法”的第一课时&#xff0c;小数加减法是以整数加减法为基础进行教学的&#xff0c;本节课走踏实了&#xff0c;后边的知识才能顺利的进行下去&#xff0c;所以本节课还是以小步走、学一点、练一点…

调用WindowsAPI显示帮助提示

导言 前一段时间&#xff0c;在编写程序的过程中&#xff0c;需要一个帮助功能按钮。这个按钮众所周知&#xff0c;按下按钮以后&#xff0c;鼠标变成带有问号的鼠标&#xff0c;然后点击画面上的控件&#xff0c;然后就回出现一个提示的文本&#xff0c;该处是什么含意。就好像…

python整形魔法_python 魔法方法

&#xff11;、什么是魔法方法&#xff1f;魔法方法就是可以给你的类增加魔力的特殊方法&#xff0c;如果你的对象实现(重载)了这些方法中的某一个&#xff0c;那么这个方法就会在特殊的情况下被 Python 所调用&#xff0c;你可以定义自己想要的行为&#xff0c;而这一切都是自…

oracle正则匹配全部,sql – 返回Oracle中正则表达式的所有匹配项

您已经提供了数据样本,说明这是一行,但已将其显示为两个不同的行.所以这个例子基于你的话.-- Sample of data from your question extra row for the sake of demonstration-- id column is added to distinguish the rows(I assume you have one)with t1(id, col) as(select …

hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些

hashtable里存的对象全部是object类型 ,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,hashtable对存入的类型没有限制 , 因此在读取转换类型时容易出错, dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更…

riak php7,Laravel中服务提供者的register和boot分别是干什么

register方法正如前面所提到的&#xff0c;在register方法中只绑定事物到服务容器&#xff0c;而不要做其他事情&#xff0c;否则&#xff0c;一不小心就能用到一个尚未被加载的服务提供者提供的服务。现在让我们来看看一个基本的服务提供者长什么样&#xff1a;namespace AppP…