《PHP 7从零基础到项目实战》学习笔记1——PHP语言基础

《PHP 7 从零基础到项目实战》——PHP语言基础章节笔记。

1.PHP的数据类型

PHP的数据类型包括:String、Integer、Float、Boolean、Array、Object和NULL。

1.1字符串

<?php
$x = "Hello World!"; // 使用双引号定义一个字符串类型的变量

echo $x; // Hello World!

echo "<br>"; // 浏览器中会显示换行,控制台输出:<br>

echo "\n"; // 控制台输出换行,浏览器中不显示换行

$x = 'Hello World!'; // 使用单引号定义字符串
echo $x; // Hello World!

$x = '张三'; // 中文汉字也是字符串类型的数据
echo $x; // 张三
?>

1.2整型

整型数据的规则:

  • 至少有一个数字(0~9)。

  • 不能出现逗号或空格

  • 没有小数点。

  • 正负数均可。

整形数据可以使用3种格式来指定:八进制(前缀为0)、十进制、十六进制(前缀为0x)。

<?php
// 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)

1.3 浮点型

浮点型数据既可以用来存储整数,也可以用来存储小数和指数。

<?php
$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)
?>

1.4布尔型

布尔型数据仅有True和False。通常用于条件判断语句中。

<?php
$x = true;
$y = false;

if($x == $y){
    echo "True";
}else
    echo "False";

1.5数组

数组是一组数据的集合,是将数据按照一定规则组织起来形成的一个整体。数组的本质是存储管理和操作一组变量。按照数组的维度可划分为:一维数组、二维数组和多维数组。

<?php
$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"
}

1.6对象

对象数据类型(Object)可以用于存储数据。首先使用class关键字声明类对象(类是可以包含属性和方法的结构),然后在类中定义数据类型,在实例化的类中使用数据类型。

<?php

// 使用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
)

1.7NULL值

NULL值表示变量没有值。NULL是数据类型为NULL的值,指明一个变量是否为空值。也可以用于数据空值和NULL值的区别。可以通过设置变量值为NULL来清空变量数据。

<?php
$x = "Hello World!";
echo $x;

$x = null;
var_dump($x);
?>

控制台输出:

Hello World!NULL

2.运算符

运算符是说明特定操作的符号,是构造PHP语言表达式的工具。

2.1算术运算符

算术运算符可以对整型和浮点型的数据进行运算。PHP中的算术运算符表1所示。

表1 算术运算符
| 运算符 | 名称 | 描述 | 实例 | | :---------: | :----------------: | :------------------: | :---------: | | x+y | 加 | x和y的和 | 1+2 | | x-y | 减 | x和y的差 | 2-1 | | x*y | 乘 | x和y的积 | 1*2 | | x/y | 除 | x除以y的商 | 2/1 | | x%y | 取模(除法的余数) | x除以y的余数 | 3%2 | | -x | 取反 | x取反 | -2 | | intdiv(x,y) | 整除 | x除以y的商的整数部分 | intdiv(4,3) |
<?php
$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.2递增递减运算符

递增递减运算符如表2所示。

表2 递增递减运算符
| 运算符 | 名称 | 描述 | | :----: | :----: | :-----------------: | | ++x | 预递增 | x先加1,再返回x的值 | | x++ | 后递增 | 先返回x的值,x再加1 | | --x | 预递减 | x先减1,再返回x的值 | | x-- | 后递减 | 先返回x的值,x再减1 |

递增递减运算符的使用示例:

<?php
$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
?>

2.3比较运算符

比较运算符如表3所示。

表3 比较运算符
| 运算符 | 名称 | 描述 | | :----: | :--------: | :----------------------------------------------------------: | | x== y | 等于 | 如果x等于y,返回true,否则返回false | | x===y | 恒等于 | 如果x等于y,且两者数据类型相同,返回true,否则返回false | | x != y | 不等于 | 如果x不等于y,返回true,否则返回false | | x <> y | 不等于 | 如果x不等于y,返回true,否则返回false | | x !==y | 不恒等于 | 如果x不等于y,或两者类型不同,返回true,否则返回false | | x > y | 大于 | 如果x大于y,返回true,否则返回false | | x < y | 小于 | 如果x小于y,返回true,否则返回false | | x >= y | 大于等于 | 如果x大于等于y,返回true,否则返回false | | x <= y | 小于等于 | 如果x小于等于y,返回true,否则返回false | | x<=>y | 组合比较符 | 如果x和y的值相等(不是恒等于),则返回0;如果x的值大于y则返回1;如果x的值小于y,则返回-1 |

比较运算符的使用示例:

<?php
// 比较运算符练习
$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)
?>

2.4逻辑运算符

逻辑运算符如表4所示。

表4 逻辑运算符
| 运算符 | 名称 | 描述 | | :------: | :--: | :--------------------------------------: | | a and b | 与 | 只有a和b都为true才返回true | | a or b | 或 | a和b中至少有一个为true才返回true | | a xor b | 异或 | a和b仅有一个为true就返回true | | a && b | 与 | a和b都为true才返回true | | a \|\| b | 或 | a和b至少有一个为true就返回true | | !a | 非 | 当a为true时返回false,a为false时返回true |

逻辑运算符的使用示例:

<?php
$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)
?>

2.5三元运算符

三元运算符的语法格式为:(expr1)?(expr2):(expr3)。

当expr1求值结果为true时,上述表达式返回expr2的值,否则返回expr3的值。

可以省略expr2,此时语法格式为:(expr1)?:(expr3)。当expr1求值结果为true时,返回expr1,否则返回expr3。

在PHP 7中,新增了一个NULL合并运算符??。例如,(expr1)??(expr2),当expr1不为NULL时返回expr1的值,否则返回expr2的值。

<?php
$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)
?>

2.6字符串连接运算符

PHP中使用英文字符"."将两个或多个字符串连接起来。

<?php
$a = 'hello';
$b = 'world!';
$c = $a.$b;
echo $c; // helloworld!
?>

2.7赋值运算符

赋值运算符是把基本赋值运算符(“=”)右边的值赋给左边的变量或常量,如表5所示。

表5 赋值运算符
| 运算符 | 实例 | 展开形式 | | :----: | :------: | :---------: | | = | $a = 'b' | $a = 'b' | | += | $a += 5 | $a = $a + 5 | | -= | $a -= 5 | $a = $a -5 | | *= | $a *= 5 | $a = $a * 5 | | /= | $a /= 5 | $a = $a / 5 | | .= | $a .= 5 | $a = $a . 5 | | %= | $a %= 5 | $a = $a % 5 |
<?php
$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
?>

2.8位运算符

位运算符是指对二进制位从低位到高位对齐后进行运算,如表6所示。

表6 位运算符
| 运算符 | 作用 | 实例 | | :----: | :------: | :------: | | & | 按位与 | $a & $b | | \| | 按位或 | $a \| $b | | ^ | 按位异或 | $a ^ $b | | ~ | 按位取反 | ~$a | | << | 向左位移 | $a << $b | | >> | 向右位移 | $a >> $b |

位运算符的使用示例如下:

<?php
$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

3.变量

变量是程序开发中一个非常重要的概念,程序的执行也是对变量操作的过程。

3.1变量的定义

变量用于存储数据,用一个变量名来标示,每创建一个变量,系统就会在内存中为其分配一个存储单元。变量的值可以根据程序运行的需要随时重新赋值。

PHP中变量的命名规则如下:

  • 变量以$符号开始,后面跟着变量名

  • 变量名必须以字母或下划线开头

  • 变量名只能包含字母、数字字符以及下划线(Az、09和_),且不能包含空格

  • 变量名区分大小写( y 和 y和 yY是两个不同的变量)

PHP是一种弱类型的语言,在创建变量时无需指定变量类型,PHP会根据变量的值自动将其设定为对应的数据类型。我们可以用赋值符“=”创建变量,例如:

$x = "hello world"; // 创建了一个变量x

3.2变量的作用域

变量的作用域是脚本中变量可被引用/使用的部分。PHP有4种不同的变量作用域:local、global、static、parameter。

在所有函数外部定义的变量拥有全局作用域,此变量称为全局变量。全局变量可以被脚本中的任何部分直接使用变量名访问,但是要在一个函数定义体中访问一个全局变量,需要使用global关键字。在PHP函数内部声明的变量是局部变量,仅能在函数内部访问。

<?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:

<?php
$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表示变量名)。所以,也可以这样写:

<?php
$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关键词。

<?php
function myTest(){
    static $x = 1;
    echo $x;
    $x++;
}
myTest();
myTest();
myTest();
?>

控制台输出:

123

在函数中还有一个参数作用域,即传递给函数的参数,参数在函数声明时即声明。

<?php
function testParam($x){
    echo $x;
}
testParam(3); // 3
?>

有的变量是可变变量,这种变量允许动态地改变一个变量的名称。可以在变量的前面再加一个“$”来实现可变变量。

<?php
$a = 'xy';
$xy = "xyz";
echo $$a; // 输出xyz,此时$$a相当于$xy。
?>

4.常量

常量是指在脚本执行过程中值不会改变的量。PHP语言中,常量大小写是敏感的,通常总是大写。

4.1常量的声明

  • 合法的常量名以字母或下划线开头,后面可跟字母、数字或下划线。
  • 可以使用define()来定义常量,在PHP5.3.0以后可以使用const关键词在类定义之外定义常量。
  • 常量只能是标量数据(boolean、integer、float、string),也可以是定义资源类型(resource)常量(但应避免使用)。

常量命名示例:

<?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_;
?>

常量的作用域是全局的,即在脚本的任何地方都可以使用已经定义的常量。

常量和变量的区别:

  • 常量前面没有美元符号($)
  • 常量只能用define()和const定义
  • 常量的作用域是全局的
  • 常量一旦被定义,就不能被重新定义或取消定义
  • 常量的值通常是标量

4.2预定义常量

PHP中有很多预定义常量,也成为魔术常量,其中很多是由不同的库定义的,只有在加载了这些库时才会出现。几个常见的PHP魔术常量如表7所示。

表7 PHP中常见的魔术常量
名称说明
_ 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

打印以上常量:

<?php
echo PHP_INT_MIN; // -9223372036854775808
echo "\n";
echo PREG_JIT_STACKLIMIT_ERROR; // 6
echo "\n";
echo ZLIB_NO_FLUSH; // 0
echo "\n";
echo ZLIB_PARTIAL_FLUSH; // 1
echo "\n";
echo ZLIB_SYNC_FLUSH; // 2
echo "\n";
echo ZLIB_FULL_FLUSH; // 3
echo "\n";
echo ZLIB_BLOCK; // 5
echo "\n";
echo ZLIB_FINISH; // 4
?>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值