《PHP 7 从零基础到项目实战》——PHP语言基础章节笔记。
PHP的数据类型包括:String、Integer、Float、Boolean、Array、Object和NULL。
$x = "Hello World!"; // 使用双引号定义一个字符串类型的变量
echo $x; // Hello World!
echo "
"; // 浏览器中会显示换行,控制台输出:
echo "\n"; // 控制台输出换行,浏览器中不显示换行
$x = 'Hello World!'; // 使用单引号定义字符串
echo $x; // Hello World!
$x = '张三'; // 中文汉字也是字符串类型的数据
echo $x; // 张三
?>
整型数据的规则:
至少有一个数字(0~9)。
不能出现逗号或空格
没有小数点。
正负数均可。
整形数据可以使用3种格式来指定:八进制(前缀为0)、十进制、十六进制(前缀为0x)。
// var_dump()函数可返回变量的数据类型和值
$x = 9527; // 定义一个整型数据类型的变量
var_dump($x); // int(9527)
echo "\n";
$x = -360;
var_dump($x); // int(-360)
echo "\n";
$x = 0x7E; // 十六进制数字
var_dump($x); // int(126)
echo "\n";
$x = 047; // 八进制数
var_dump($x); // int(39)
?>
注意:在php 7中,含有十六进制字符的字符串不再被视为数字,而是当作普通字符串。
例如:
var_dump("0x123" == "291"); // bool(false)
var_dump(is_numeric("0x123")); // bool(false)
var_dump("0xe"+"0x1"); // int(0)
浮点型数据既可以用来存储整数,也可以用来存储小数和指数。
$x = 3.14159265358979323846; // 带小数
var_dump($x); // float(3.1415926535898)
$x = 2.4e3; // 指数
var_dump($x); // float(2400)
$x = 8E-5;
var_dump($x); // float(8.0E-5)
?>
布尔型数据仅有True和False。通常用于条件判断语句中。
$x = true;
$y = false;
if($x == $y){
echo "True";
}else
echo "False";
数组是一组数据的集合,是将数据按照一定规则组织起来形成的一个整体。数组的本质是存储管理和操作一组变量。按照数组的维度可划分为:一维数组、二维数组和多维数组。
$animal = array("Tiger","Fish", "Monkey" => array('孙悟空','孙悟饭','孙悟天'),"Duck");
var_dump($animal);
?>
控制台打印结果:
array(4) {
[0]=>
string(5) "Tiger"
[1]=>
string(4) "Fish"
["Monkey"]=>
array(3) {
[0]=>
string(9) "孙悟空"
[1]=>
string(9) "孙悟饭"
[2]=>
string(9) "孙悟天"
}
[2]=>
string(4) "Duck"
}
对象数据类型(Object)可以用于存储数据。首先使用class关键字声明类对象(类是可以包含属性和方法的结构),然后在类中定义数据类型,在实例化的类中使用数据类型。
// 使用class声明一个类对象Person
class Person
{
var $name; // 姓名
var $gender; // 性别
var $age; // 年龄
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getGender()
{
return $this->gender;
}
/**
* @param mixed $gender
*/
public function setGender($gender): void
{
$this->gender = $gender;
}
/**
* @return mixed
*/
public function getAge()
{
return $this->age;
}
/**
* @param mixed $age
*/
public function setAge($age): void
{
$this->age = $age;
}
}
$p = new Person(); // 实例化一个Person对象
$p -> setName("张三");
$p -> setGender("男");
$p -> setAge(18);
// 使用var_dump()函数可以输出变量的数据类型和值
var_dump($p);
// 使用print_r()函数可以输出对象
print_r($p);
?>
控制台打印结果:
object(Person)#1 (3) {
["name"]=>
string(6) "张三"
["gender"]=>
string(3) "男"
["age"]=>
int(18)
}
Person Object
(
[name] => 张三
[gender] => 男
[age] => 18
)
NULL值表示变量没有值。NULL是数据类型为NULL的值,指明一个变量是否为空值。也可以用于数据空值和NULL值的区别。可以通过设置变量值为NULL来清空变量数据。
$x = "Hello World!";
echo $x;
$x = null;
var_dump($x);
?>
控制台输出:
Hello World!NULL
运算符是说明特定操作的符号,是构造PHP语言表达式的工具。
算术运算符可以对整型和浮点型的数据进行运算。PHP中的算术运算符表1所示。
$x = 10;
$y = 3;
echo ($x + $y); // 求和,结果为:13
echo "\n";
echo ($x - $y); // 求差,结果为:7
echo "\n";
echo ($x / $y); // 求商,结果为:3.3333333333333
echo "\n";
echo ($x * $y); // 求积,结果为:30
echo "\n";
echo ($x % $y); // 求余,结果为:1
echo "\n";
echo (-$x); // 取反,结果为:-10
echo "\n";
echo (intdiv($x,$y)); // 取整,结果为:3
?>
递增递减运算符如表2所示。
递增递减运算符的使用示例:
$x = 1;
echo $x; // 输出1
echo ++$x; // 输出2
echo $x; // 输出2
echo $x++; // 输出2
echo $x; // 输出3
echo --$x; // 输出2
echo $x; // 输出2
echo $x--; // 输出2
echo $x; // 输出1
?>
比较运算符如表3所示。
比较运算符的使用示例:
// 比较运算符练习
$x = 10;
$y = "10";
var_dump($x == $y); // bool(true)
var_dump($x === $y); // bool(false)
var_dump($x != $y); // bool(false)
var_dump($x !== $y); // bool(true)
$a = 10;
$b = 20;
var_dump($a > $b); // bool(false)
var_dump($a < $b); // bool(true)
var_dump($a <> $b); // bool(true)
var_dump($a <=> $b); // int(-1)
var_dump($b <=> $a); // int(1)
var_dump($x <=> $y); // int(0)
?>
逻辑运算符如表4所示。
逻辑运算符的使用示例:
$a = true;
$b = false;
var_dump($a and $b); // bool(false)
var_dump($a or $b); // bool(true)
var_dump($a xor $a); // bool(false)
var_dump($a xor $b); // bool(true)
var_dump($a && $b); // bool(false)
var_dump($a || $b); // bool(true)
var_dump(! $a); // bool(false)
var_dump(! $b); // bool(true)
?>
三元运算符的语法格式为:(expr1)?(expr2):(expr3)。
当expr1求值结果为true时,上述表达式返回expr2的值,否则返回expr3的值。
可以省略expr2,此时语法格式为:(expr1)?:(expr3)。当expr1求值结果为true时,返回expr1,否则返回expr3。
在PHP 7中,新增了一个NULL合并运算符??。例如,(expr1)??(expr2),当expr1不为NULL时返回expr1的值,否则返回expr2的值。
$a = (1 > 2) ? 'yes' : 'no';
$b = (3 > 2) ? : 'no';
$c = (1 > 2)?: 'yes';
$d = null ?? 2;
$e = 5 ?? 2;
var_dump($a); // string(2) "no"
var_dump($b); // bool(true)
var_dump($c); // string(3) "yes"
var_dump($d); // int(2)
var_dump($e); // int(5)
?>
PHP中使用英文字符"."将两个或多个字符串连接起来。
$a = 'hello';
$b = 'world!';
$c = $a.$b;
echo $c; // helloworld!
?>
赋值运算符是把基本赋值运算符(“=”)右边的值赋给左边的变量或常量,如表5所示。
$a = 5;
$b = 3;
$c = $a + $b;
echo $c; // 8
$c += $a;
echo $c; // 13
$c -= $b;
echo $c; // 10
$c /= $b;
echo $c; // 3.3333333333333
$c .= $a;
echo $c; // 3.333333333333335
$a %= $b;
echo $a; // 2
echo (1 >> 2); // 0
echo (-1 >> 2); // -1
echo (1 >> -2); // PHP Fatal error: Uncaught ArithmeticError: Bit shift by negative number
?>
位运算符是指对二进制位从低位到高位对齐后进行运算,如表6所示。
位运算符的使用示例如下:
$a = 8;
$b = 15;
echo ($a & $b) . "\n"; // 8
echo ($a | $b) . "\n "; // 15
echo ($a ^ $b) . "\n "; // 7
echo (~ $a) . "\n "; // -9
echo ($a << $b) . "\n "; // 262144
echo ($a >> $b) . "\n "; // 0
?>
在PHP 7中,位移负的位置会产生异常,左位移超出位数会返回0。
echo (1 >> 2); // 0
echo (-1 >> 2); // -1
echo (1 >> -2); // PHP Fatal error: Uncaught ArithmeticError: Bit shift by negative number
变量是程序开发中一个非常重要的概念,程序的执行也是对变量操作的过程。
变量用于存储数据,用一个变量名来标示,每创建一个变量,系统就会在内存中为其分配一个存储单元。变量的值可以根据程序运行的需要随时重新赋值。
PHP中变量的命名规则如下:
变量以$符号开始,后面跟着变量名
变量名必须以字母或下划线开头
变量名只能包含字母、数字字符以及下划线(Az、09和_),且不能包含空格
变量名区分大小写( y 和 y和 y和Y是两个不同的变量)
PHP是一种弱类型的语言,在创建变量时无需指定变量类型,PHP会根据变量的值自动将其设定为对应的数据类型。我们可以用赋值符“=”创建变量,例如:
$x = "hello world"; // 创建了一个变量x
变量的作用域是脚本中变量可被引用/使用的部分。PHP有4种不同的变量作用域:local、global、static、parameter。
在所有函数外部定义的变量拥有全局作用域,此变量称为全局变量。全局变量可以被脚本中的任何部分直接使用变量名访问,但是要在一个函数定义体中访问一个全局变量,需要使用global关键字。在PHP函数内部声明的变量是局部变量,仅能在函数内部访问。
$x = 5; // 全局变量
function myTest(){
$y = 3; // 局部变量
echo "Test variables inside the function:";
echo "Variable x is: ". $x; // Notice: Undefined variable: x
echo "\n";
echo "Varible y is: $y\n"; // Varible y is: 3
}
myTest();
echo "Test variables outside the function:\n";
echo "Varible x is:" .$x; // Varible x is:5
echo "\n";
echo "Variable y is: $y"; // Notice: Undefined variable: y
?>
因为 x 是 在 函 数 外 部 定 义 的 , 是 全 局 变 量 , 在 函 数 内 部 无 法 直 接 访 问 x是在函数外部定义的,是全局变量,在函数内部无法直接访问 x是在函数外部定义的,是全局变量,在函数内部无法直接访问x; y 是 在 函 数 内 部 定 义 的 , 属 于 局 部 变 量 , 所 以 在 函 数 外 部 访 问 不 到 。 如 果 要 在 函 数 内 部 访 问 y是在函数内部定义的,属于局部变量,所以在函数外部访问不到。如果要在函数内部访问 y是在函数内部定义的,属于局部变量,所以在函数外部访问不到。如果要在函数内部访问x,必须在函数内先使用global关键字。
还是用上面的代码,在myTest()函数中添加一行,即能正确输出$x:
$x = 5; // 全局变量
function myTest(){
global $x;
$y = 3; // 局部变量
echo "Test variables inside the function:";
echo "Variable x is: ". $x; // Variable x is: 5
echo "\n";
echo "Varible y is: $y\n"; // Varible y is: 3
}
?>
在PHP中,全局变量存储在$GLOBALS[index]中(index表示变量名)。所以,也可以这样写:
$x = 5; // 全局变量
function myTest(){
//global $x;
$y = 3; // 局部变量
echo "Test variables inside the function:";
echo "Variable x is: ". $GLOBALS['x']; // Variable x is: 5
echo "\n";
echo "Varible y is: $y\n"; // Varible y is: 3
}
?>
当一个函数完成时,它的所有变量通常都会被删除。如果想让函数执行完毕时函数内的局部变量保留,可以使用static关键词。
function myTest(){
static $x = 1;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
控制台输出:
123
在函数中还有一个参数作用域,即传递给函数的参数,参数在函数声明时即声明。
function testParam($x){
echo $x;
}
testParam(3); // 3
?>
有的变量是可变变量,这种变量允许动态地改变一个变量的名称。可以在变量的前面再加一个“$”来实现可变变量。
$a = 'xy';
$xy = "xyz";
echo $$a; // 输出xyz,此时$$a相当于$xy。
?>
常量是指在脚本执行过程中值不会改变的量。PHP语言中,常量大小写是敏感的,通常总是大写。
常量命名示例:
// 合法的常量名
define("F00", "never"); // 定义一个名为F00的常量
echo F00;
define("F01", "sometimes");
echo F01;
define("F02_BAT", "always");
echo F02_BAT;
// 非法的常量名
define("2F003", "something");
echo 2F003; // PHP Parse error: syntax error, unexpected 'F003' (T_STRING), expecting ';' or ','
const A = 'aaaa'; // 使用const定义一个常量,与使用define定义的效果一样
echo A;
// 下面的定义是合法的,但应避免这样做(自定义常量不要以下划线开头)
define("_F00_", "something");
echo _F00_;
?>
常量的作用域是全局的,即在脚本的任何地方都可以使用已经定义的常量。
常量和变量的区别:
PHP中有很多预定义常量,也成为魔术常量,其中很多是由不同的库定义的,只有在加载了这些库时才会出现。几个常见的PHP魔术常量如表7所示。
名称 | 说明 |
---|---|
_ LINE _ | 文件中的当前行号 |
_ FILE _ | 文件的完整路径和文件名。如果用在被包含文件中,就返回被包含的文件名。自PHP 4.0.2起,_FILE_总是包含一个绝对路径(如果是符号连接,就是解析后的绝对路径),而之前的版本有时会包含一个相对路径 |
_ DIR _ | 文件所在的目录。如果用在被包括文件中,就返回被包括的文件所在的目录。它等价于dirname(_ FILE _)。除非是根目录,否则目录名中不包括末尾的斜杠 |
_FUNCTION _ | 函数名称。自PHP 5起,本常量返回该函数被定义时的名字(区分大小写)。在PHP 4中该值总是小写字母 |
_CLASS _ | 类的名称。自PHP 5起,本常量返回该类被定义时的名字(区分大小写)。在PHP 4中该值总是小写字母,类名包括其被声明的作用区域(例如:Foo\Bar)。注意:自PHP 5.4起,_CLASS_对trait也起作用。当用在trait方法中时,_CLASS_是调用trait方法的类的名字 |
_TRAIT _ | trait的名字。自PHP 5.4起,此常量返回trait被定义时的名字(区分大小写)。trait名包括其被声明的作用区域(例如Foo\Bar) |
_METHOD _ | 类的方法名。返回该方法被定义时的名字(区分大小写) |
_NAMESPACE _ | 当前命名空间的名称(区分大小写)。此常量是在编译时定义的 |
在PHP 7中新增了以下变量:
PHP_INT_MIN
PREG_JIT_STACKLIMIT_ERROR
ZLIB_NO_FLUSH
ZLIB_PARTIAL_FLUSH
ZLIB_SYNC_FLUSH
_FULL_FLUSH
_BLOCK
_FINISH
打印以上常量: