飞机的 PHP 学习笔记一:语言基础
前言
最近在系统的学习 PHP ,参考的资料是《PHP编程》+ 官方文档(如果你有好的学习资料,欢迎推荐给我)。虽然这本《PHP编程》是基于 PHP5 的,但我笔记里的代码,全部在 PHP 7.2 的环境里测试过,是能够运行的。另,本笔记中只记录我模糊不清的知识。
大小写
类、函数、内置的结构以及关键字等是不区分大小写的。(PS:变量区分大小写)
注释
PHP 有多种注释方式,这些方式都是借鉴现有的语言(C、C++、UNIX shell)
其中 shell 风格的注释使用 #
来标识。
数据类型
PHP 提供八种类型的值或称为数据类型。
四种是标量型(单值)的:整形、浮点数(实数)、字符串和布尔型。
两种复合类型(集合):数组和对象。
剩下的两种是特殊类型:资源和 NULL 。
十六进制以
0x
开头,字母是可以大写或小写,但通常是大写八进制以
0
开头。二进制以
0b
开头。变量在双引号中会被解析(解释),而在单引号中,他们不会被解析:
$name = "Guido"; echo "Hi, $name\n"; // Hi, Guido echo 'Hi, $name'; // Hi, $name
在 PHP 中,以下值的计算结果为
false
:- 关键字
false
- 整形
0
- 浮点数
0.0
- 空字符串
""
和字符串"0"
- 空数组
- 空对象
NULL
值
- 关键字
定义一个类,就可以用关键字
new
创建这个类的任意数量的对象,类的属性和方法可以通过->
结构访问。
变量的变量
$foo = "bar";
$$foo = "baz"; //变量bar的值为
变量的引用
在PHP中,引用就是如何创建变量的别名。可以说两个变量储存了相同的值。
销毁其中一个变量的值,不会影响另一个变量的值。
$bigLongVariableName = "PHP";
$short =& $bigLongVariableName;
$bigLongVariableName .= " rocks!";
print "\$short is $short\n"; // $short is PHP rocks!
print "Long is $bigLongVariableName\n"; // Long is PHP rocks!
$short = "Programing $short";
print "\$short is $short\n"; // $short is Programming PHP rocks!
print "Long is $bigLongVariableName\n"; // Long is Programming PHP rocks!
$white = "snow";
$black =& $white;
unset($white);
print $black; //snow
这里的换行符可能在浏览器中显示不出来,可以参考这篇:如何在 PHP 中换行,解决问题。
变量的作用域
在 PHP 中,只有函数可以提供局部作用域。与其他语言不同,在 PHP 中不能创建一个作用域是循环、条件分支或其他块类型的局部变量。也就是说函数外声明的变量就是全局变量,他们可以在程序的任何部分被访问。不过,默认情况下全局变量在内部函数中是不可访问的。
为了让函数访问全局变量共有两个方法:
方法一:使用 global
关键字
function updateCounter()
{
global $counter;
$counterr++;
}
$counter = 10;
updateCounter();
echo $counter; // 11
方法二:使用 PHP 中的 $GLOBALS
数组
function updateCounter()
{
$GLOBALS[counter]++:
}
$counter = 10;
updateCounter();
echo $counter; // 11
静态变量 ( static
)
静态变量在一个函数中被多次调用时,其值不会丢失,但此变量仅在函数内时可见的。
function updateCounter()
{
static $counter = 0;
$counter++;
echo "Static counter is now {$counter}\n";
}
$counter = 10;
updateCounter(); // Static counter is now 1
updateCounter(); // Static counter is now 2 // 不会再被付初始值
echo "Global couter is {$couter}\n"; // Global counter is 10
隐式转换
当二元算数操作符是两个不同的类型时 PHP 会根据需要自动转换,其中的阶梯为:字符串 -> 整数 -> 浮点数。
假定一个字符串以一个整数或浮点数开始。如果未在字符串的开始处发现任何数字,该字符串的数值为0。如果字符串包含一个点( .
)或大写/小写的 e
,对该字符串的求值则生成一个浮点数。例如:
"9 Lives" - 1; //8 (整数)
"3.14 Pies" * 2; //6.28 (浮点数)
"9 Lives." -1; //8 (整数)
"1E3 Points of Light" + 1 // 1001 (浮点型)
除法操作符
如果两个数能整除,则为整数( 4/2
),否则为浮点数( 1/2
)。
自动递增操作符
在 PHP 中,对字符串中使用自动递增,会相应得到下一个字母。(我测试了一下,只对递增操作符有效)
$a = "z";
echo ++$a; // "aa"
垃圾收集
PHP 使用引用计数和写时复制来管理内存。
- 写时复制:保证了变量间复制值不浪费内存。
- 引用计数:保证了不在需要时将内存释放给操作系统。
操作符
错误屏蔽( @
)
一些操作符或者函数可能产生错误信息,错误屏蔽操作符用来阻止这些信息的产生。
执行( ` )
反引号操作符可以把反引号之间的字符串当作shell命令执行,并返回输出结果:
$listing = `ls`;
echo $listing; // 输出文件目录
类型( instanceof
)
Instanceof 操作符用来测试一个变量是否为给定类的实例化对象,或者是一个接口的实现:
$a = new Foo;
$isAFoo = $a instanceof Foo; // ture
$isABar = $a instanceof Bar; // false
流程控制语句
新的写法
PHP 支持很多传统编程结构,用来控制程序执行的流程。与传统的用一对大括号包括的写法不同, PHP 还提供了另外一种语法。使用一个冒号(:
)作为流程控制语句的结尾,并且以特定的关键字作为流程控制语句块的结尾。
if ($user_balidated){
echo "Welocome!";
$greeted = 1;
}else{
echo "Access Forbidden!";
exit;
}
//等价于
if ($user_balidated): // 这里不一样
echo "Welcome!";
$greeted = 1;
else: // //这里不一样
echo "Access Forbidden!";
exit;
endif; // 这里不一样
这里仅展示 if
的写法,其他语句与上面类似。
break 与 continue
PHP 中 break
和 continue
分别代表提前退出一个循环和跳到循环条件的下一次判断。不同的是,可以在关键词后面放一个数字,表示 break
要中断多少层循环。以 break
为例:
$i = 0;
$j = 0;
while($i < 10){
while($j < 10){
if ($j == 5){
break 2;
}
++$j;
}
++$i;
}
echo "{$i},{$j}"; // 0,5
和 break
类似,continue
也可以退出多个层次的循环。
declare
declare
语句允许指定的一段代码执行指令。目前只有两种 declare
的方式:ticks
和 encoding
指令
ticks
Tick(时间周期)是一个 declare
代码段中解释器每执行 N
条可计时的低级语句就会发生的事件。不是所有语句都可以计时。通常条件表达式和参数表达式都不可计时。
在每个 tick 中出现的事件是由 register_tick_function() 来指定的。注意每个 tick 中可以出现多个事件。
declare(ticks=1); // 每执行一条语句时,tick_handler()就会被执行
// A function called on each tick event
function tick_handler()
{
echo "tick_handler() called\n <br/>";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
encoding
使用 encoding
指令指定 PHP 脚本输出编码的格式
declare(encoding = "UTF-8");
PS : 这种语句在编译时要加上 --enable-zend-multibyte
的选项。否则没有效果。
exit 和 return
脚本执行到 exit
语句时,就会停止执行。
return
语句一般用于某个函数退出返回,或者脚本停止执行。
die()
函数时 exit
语句的一个别名。
包含代码
PHP 提供两种方式实现从另外的模块加载代码和 HTML 内容:require
和 include
。
require
加载一个不存在的文件时,会产生一个致命的错误,进而脚本停止运行include
加载一个不存在的文件时,会产生一个警告哦,不停止脚本的执行- 如果你多次引用同一个文件,但是你只想加载一次,可以使用
include_once
和require_once
。
在 Web 页面中嵌套 PHP
标准( XML )风格
<?php echo "Hello, world"; ?>
SGML 风格
<? echo "Hello, world"; ?>
这种形式被称为短标签,默认时关闭的。你可以在编译时增加 -enable-short-tags
选项,或者在 PHP 配置文件中打开 short_open_tag
。
感谢你看到了这里。如果文章有错误,请评论指正,谢谢!
本作品采用《CC 协议》,转载必须注明作者和本文链接