那些教程没有的php1-基础知识补漏
字符串
- heredoc结构
类似双引号,其中的变量会被解析。严格遵循下边的格式,结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
//在EOD后必须要包含一个换行
- Nowdoc
类似单引号,只是开头一点点变化
<?php
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
- string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改
关于字符串的编码
PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。如何将字节转换成字符的信息,由程序员来决定。字符串由什么值来组成并无限制;特别的,其值为 0(“NUL bytes”)的字节可以处于字符串任何位置(不过有几个函数,在本手册中被称为非“二进制安全”的,也许会把 NUL 字节之后的数据全都忽略)。
如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为 ISO-8859-1,以此类推。不过这并不适用于激活了 Zend Multibyte 时。
- 某些函数假定字符串是以单字节编码的,但并不需要将字节解释为特定的字符。例如 substr(),strpos(),strlen() 和 strcmp()。
转换为对象
将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值
Callback 回调类型
自 PHP 5.4 起可用 callable 类型指定回调类型 callback。
可变变量
在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。
魔术变量
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。(如果是符号连接,则是解析后的绝对路径)
__DIR__ 文件所在的目录。它等价于 dirname(__FILE__)
__FUNCTION__ 返回该函数被定义时的名字(区分大小写)
__CLASS__ 返回该类被定义时的名字(区分大小写)
__METHOD__ 类的方法名。返回该方法被定义时的名字(区分大小写)
__NAMESPACE__ 当前命名空间的名称(区分大小写)
运算符
$a ** $ba的b次方(php5.6+)- 错误控制运算符
如果用 set_error_handler() 设定了自定义的错误处理函数,仍然会被调用,但是此错误处理函数可以(并且也应该)调用 error_reporting(),而该函数在出错语句前有 @ 时将返回 0 - 执行运算符比如`ls -a`的效果与函数 shell_exec() 相同
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的 - 数组运算符
$a + $b 联合 $a 和 $b 的联合。两个数组中都有的键名,则只用左边数组中的,右边的被忽略
流程控制的替代语法
在模板中使用真是棒棒的。
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>
函数
用户自定义函数
任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义。
函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时。
当一个函数是有条件被定义时,必须在调用函数之前定义。
<?php
$makefoo = true;
/* 不能在此处调用foo()函数,
因为它还不存在,但可以调用bar()函数。*/
bar();
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
/* 现在可以安全调用函数 foo()了,
因为 $makefoo 值为真 */
if ($makefoo) foo();
function bar()
{
echo "I exist immediately upon program start.\n";
}
?>
函数的函数
PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
foo();
/* 现在可以调用bar()函数了,因为foo()函数
的执行使得bar()函数变为已定义的函数 */
bar();
?>
函数的参数
如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &。传引用的参数也可以有默认值。
类型声明
the given value is of the incorrect type, then an error is generated: in PHP 5, this will be a recoverable fatal error, while PHP 7 will throw a TypeError exception.
Class/interface name The parameter must be an instanceof the given class or interface name. PHP 5.0.0
array The parameter must be an array. PHP 5.1.0
callable The parameter must be a valid callable. PHP 5.4.0
bool The parameter must be a boolean value. PHP 7.0.0
float The parameter must be a floating point number. PHP 7.0.0
int The parameter must be an integer. PHP 7.0.0
string The parameter must be a string. PHP 7.0.0
默认情况下如果可以转换,php会将不符合声明的传入参数转换,可以使用strict_type。
note
- declare在用于strict_trpe时,不能使用
declare(strict_types=1){XXXXX}结构设置declare作用域,只能是declare(strict_types=1) ; - Strict typing applies to function calls made from within the file with strict typing enabled, not to the functions declared within that file.
返回类型声明
function sum($a, $b): float {
return $a + $b;
}
可变数量参数
在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中(php7也可使用),使用函数 func_num_args(),func_get_arg(),和 func_get_args() 。
...in PHP 5.6+
//...前边可以带有普通参数,也可以有类型提示(必须全部满足)
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
You can also use ... when calling functions to unpack an array or Traversable variable or literal into the argument list:
function add($a, $b) {
return $a + $b;
}
$a = [1, 2];
echo add(...$a);
可变函数
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变。
$foo->$funcname();
Foo::$variable();
匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures)。
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。闭包的父作用域是定义该闭包的函数(不一定是调用它的函数)
$message = 'hello';
// 继承 $message,不用use会报错
$example = function () use ($message) {
var_dump($message);
};
echo $example();
那些教程没有的php1-基础知识补漏的更多相关文章
- (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识
开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...
- python基础教程1:入门基础知识
写在系列前,一点感悟 没有梳理总结的知识毫无价值,只有系统地认真梳理了才能形成自己的知识框架,否则总是陷入断片儿似的学习-遗忘循环中. 学习方法真的比刻苦"傻学"重要多了,而最重要 ...
- 《python基础教程》笔记之 基础知识
数字相关 在Python程序前加上 from __future__ import division 或者在解释器里面直接执行它,或者通过命令行运行Python时使用命令开关-Qnew,会使单斜线不再整 ...
- Appium自动化测试教程-自学网-app基础知识
Instrumentation的缺点是不支持跨应用,比如我想要先调起通讯录,在操作其他的app,则不支持. 第一步,应该确定系统哪些模块适合自动化.哪些不适合做自动化,明确做自动化给我们带来的好处是什 ...
- (转)第一天 XHTML CSS基础知识 文章出处:标准之路(http://www.aa25.cn/div_css/902.shtml)
欢迎大家学习<十天学会web标准>,也就是我们常说的DIV+CSS.不过这里的DIV+CSS是一种错误的叫法,建议大家还是称之为web标准. 学习本系列教程需有一定html和css基础,也 ...
- DIV+CSS专题:第一天 XHTML CSS基础知识
欢迎大家学习<十天学会web标准>,也就是我们常说的DIV+CSS.不过这里的DIV+CSS是一种错误的叫法,建议大家还是称之为web标准. 学习本系列教程需有一定html和css基础 ...
- Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
随机推荐
- Session机制详解
转自:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能 ...
- swift 方法
swift的类,结构体,枚举中都可以定义方法. 1:实例方法.类似于类成员方法 1.1实例方法是属于类,结构体,枚举的实例的方法.通过其实例访问. class CShow{ func testShow ...
- iOS 模拟器键盘弹出以及中文输入
1.虚拟键盘的弹出与收起切换: 快捷键:command+shift+K 2.中文输入: Xcode 菜单项 --> Product --> Scheme --> Edit Schem ...
- 命令行 更新Android sdk
使用如下代理服务器: 大连东软信息学院镜像服务器地址: http://mirrors.neusoft.edu.cn 端口:80 北京化工大学镜像服务器地址: IPv4: http://ubuntu.b ...
- 再探 Ext JS 6 (sencha touch/ext升级版) 变化篇 (编译命令、滚动条、控制层、模型层、路由)
从sencha touch 2.4.2升级到ext js 6,cmd版本升级到6.0之后发生了很多变化 首先从cmd说起,cmd 6 中sencha app build package不能使用了,se ...
- sqlmap查找SQL注入漏洞入门
1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...
- Windows 10 Weather App无法正常显示解决方法
Weather动态磁贴显示Washington(不知是否和我的region设置有关系),打开应用却停留在输入需要搜索的天气.根据提示输入"Shanghai, China"并单击搜索 ...
- sql: 查找约束
主键约束 SELECT tab.name AS [表名], idx.name AS [主键名称], col.name AS [主键列名] FROM sys.indexes idx ...
- 事务复制中的msrepl_ccs
在事务复制里,如果一个article被更新,distributionagent会调用相应的存储过程将数据更新到订阅端. 这些存储过程分别是[sp_MSins_dboTableName],[sp_MSd ...
- sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)
Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...