image.png
PHP即“超文本预处理器”,是一种通用开源脚本语言。
PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。
接下来一起开心地 PHPING 吧!∩_∩

1.基本语法

1.基础

先给个最简单的栗子吧:

<!DOCTYPE html>  
<html>  
<body>  
<h1>My first PHP page</h1>  
  
<?php  
echo "Hello World!";  
?>  
 
</body>  
</html>
  1. PHP 脚本以<?php开始,以?>结束;
  2. PHP 文件的默认文件扩展名是 ".php"。
  3. PHP 文件通常包含 HTML 标签和一些 * PHP 脚本代码。
  4. 通过 PHP,有两种在浏览器输出文本的基础指令:echoprint
  5. 注释也分为两种,单行//,多行/* */

2.PHP变量
  1. 变量规则

    • 变量以 $ 符号开始,后面跟着变量的名称
    • 变量名必须以字母或者下划线字符开始
    • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
    • 变量名不能包含空格
    • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
    • PHP 没有声明变量的命令,变量在第一次赋值时被创建
    • 赋一个文本值给变量时,需要在文本值两侧加上引号
  2. PHP 是一门弱类型语言

    • 不必向 PHP 声明该变量的数据类型。
    • PHP 会根据变量的值,自动把变量转换为正确的数据类型。
    • 在强类型的编程语言中,必须在使用变量前先声明(定义)变量的类型和名称。
  3. PHP变量作用域

    1. PHP有四种不同的变量作用域:local、global、static、parameter。
    2. 定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
    3. 函数内定义的变量就是局部变量,它的作用域为函数定义范围内。local&global示例
    4. 函数之间存在作用域互不影响。
    5. 函数内访问全局变量需要global关键字或者使用$GLOBALS[index]数组
    6. static关键字可以使得某个局部变量不要在该函数执行完后被删除,而是每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
    7. parameter参数作用域,参数是通过调用代码将值传递给函数的局部变量。

      <?php  
      function  myTest($x)
      {  
        echo  $x; 
      } 
      myTest(5); 
      ?>

3.echo和print语句
  • echo - 可以输出一个或多个字符串
  • print - 只允许输出一个字符串,返回值总为 1
  • echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
  • 二者都是一个语言结构,使用的时候可以不用加括号,也可以加上括号。
  • 二者显示字符串都可以包含html标签。

echo 显示字符串显示变量
print 显示字符串显示变量


4.PHP EOF(heredoc)

PHP EOF(heredoc) 是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
还是先来个栗子熟悉下:

<?php  
echo<<<EOF  
        <h1>我的第一个标题</h1>  
        <p>我的第一个段落。</p>  
EOF;  
// 结束需要独立一行且前后不能空格  
?>

使用说明:

  1. EOF可以用任意其它字符代替,只需保证结束标识与开始标识一致且不在正文中出现(类似帧定界符),也可以用EOT、EOD、EOF;
  2. 结束标识必须顶格独自占一行(即必须从行首开始,不能有缩进和空格,且在结束标记末尾要有分号(前后不衔接其他字符);
  3. 开始标识可以不带引号或带单双引号,不带引号带双引号效果一致,解释内嵌的变量和转义符号,带单引号不解释内嵌的变量和转义符号;
  4. 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西,当然,它会解析html格式的内容;
  5. PHP 定界符EOF中的任何特殊字符都不需要转义;
  6. 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符.或,来拼接。另外双引号以内的也可以被正常解析,如下:

image.png
image.png


5.数据类型及比较

数据类型分为七类:String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。

  1. String:一个字符串是一串字符的序列,被放在单引号或者双引号中;
  2. Int:必须至少有一个数字 (0-9)、不能包含逗号或空格、没有小数点、可以是正数或负数、可以用三种格式来指定:十进制,十六进制(以 0x 为前缀)或八进制(前缀为 0);
  3. 使用var_dump() 函数返回变量的数据类型和值,对于以下都适用;
  4. Float:带小数部分的数字,或是指数形式;
  5. Boolean:常用于条件判断,一般这样定义 $x=true; $y=false;
  6. Array:数组可以在一个变量储存多个值,一般这样定义 $cars=array("Volvo","BMW","Toyota")
  7. Object:对象数据类型也可以用于存储数据,首先,必须使用class关键字声明类对象--类是可以包含属性和方法的结构,然后在类中定义数据类型,然后在实例化的类中使用数据类型。 this就是指向当前对象实例的指针,不指向任何其他对象或类。

image.png

惊喜福利来了
echo,print,printr,vardump 的区别
它们几个都是具有输出功能的函数。
1.echo
输出一个或者多个字符串。
2.print
和 echo 最主要的区别: print 仅支持一个字符串,并总是返回 1。
3.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
4.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。


言归正传,PHP变量进行类型比较时,和js一样也是分为双等和三等的,但是意义不同
PHP中包含松散比较和严格比较:

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

回顾下js中的双等和三等比较吧。


6.常量
  • 常量值被定义后,在脚本的其他任何地方都不能被改变;
  • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字符出现。 (常量名不需要加 $ 修饰符,也不能加);
  • 常量是全局的:常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用;
  • 设置/定义的方法
bool define (  string $name , mixed $value ,[  bool $case_insensitive =  false  ]  )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive:可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感(false)的。
  • 给个栗子:

    <?php  
    define("GREETING", "欢迎访问 Myweb.com", true); 
    function  myTest(){  
       echo  GREETING; 
    } 
    myTest(); // 输出 "欢迎访问 Myweb.com"  
    ?>
7.字符串变量
  • 字符串变量用于存储并处理文本,一般用echoprint打印
  • 合并/并置运算符 (.) 用于把两个字符串值连接起来。如下将输出Hello world! What a nice day!

    <?php  
    $txt1="Hello world!";  
    $txt2="What a nice day!";  
    echo $txt1 . " " . $txt2;  
    ?>
  • strlen() 函数返回字符串的长度(字节数)。
  • strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
  • mb_strpos 按汉字处理,strpos 按字符处理。

    <?php
    echo strpos('开始23测试ceshi',  '测试')  . PHP_EOL; 
    echo mb_strpos('开始23测试ceshi',  '测试')  . PHP_EOL; 
    echo strpos('123测试ceshi',  '测试')  . PHP_EOL; 
    echo mb_strpos('123测试ceshi',  '测试')  . PHP_EOL;  
    //输出8 4 3 3
    ?>

8.PHP运算符
  • 加减乘除余,+ - * / %
  • PHP7+ 版本新增整除运算 intdiv(),对于var_dump(intdiv(10, 3));会输出int(3)
  • 赋值运算符(和其他语言类似)
运算符 等同于 描述
x = y x = y 左操作数被设置为右侧表达式的值
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y 模(除法的余数)
a .= b a = a . b 连接两个字符串
运算符 名称 描述
++ x 预递增 x 加 1,然后返回 x
x ++ 后递增 返回 x,然后 x 加 1
-- x 预递减 x 减 1,然后返回 x
x -- 后递减 返回 x,然后 x 减 1
  • 比较运算符,前面数据类型的比较中已经简单提过,主要还是区分双等和三等。
运算符 名称 描述 实例
x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false
x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true
x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true
  • 逻辑运算符
异或
and or xor
&& //(垂直) !
至少一个 有且仅有一个
运算符 名称 描述
x + y 集合 x 和 y 的集合
x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y 不相等 如果 x 不等于 y,则返回 true
x <> y 不相等 如果 x 不等于 y,则返回 true
x !== y 不恒等 如果 x 不等于 y,则返回 true
  • 三元运算符

语法格式 (expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3expr1 求值为 TRUE 时返回 expr1,否则返回 expr3

<?php  
$test = '菜鸟教程'; 
// 普通写法  
$username = isset($test) ? $test : 'nobody'; echo  $username, PHP_EOL; 
// PHP 5.3+ 版本写法  
$username = $test ?: 'nobody'; 
echo  $username, PHP_EOL; //PHP_EOL是换行符
//通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody:
//PHP 7+版本写法
$username = $_GET['user'] ?? 'nobody'; 
// 类似的三元运算符  
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值  
?>
  • 组合比较符

    格式:$c \= $a <=> $b;
    解析:

    • 如果$a > $b, 则$c的值为1
    • 如果$a == $b, 则$c的值为0
    • 如果$a < $b, 则$c的值为-1
  • 运算符优先级:括(号)、单(操作数)、算(术)、移(位)、关(系);位(运算符)、逻(辑)、条(件)、赋(值)、逗(号)。
  • 逻辑运算符内部优先级:

    <?php
    // 优先级: &&  >  =  >  and
    // 优先级: ||  >  =  >  or
    
    $a = 3;
    $b = false;
    $c = $a or $b;
    var_dump($c);  // 这里的 $c 为 int 值3,而不是 boolean 值 true
    $d = $a || $b;
    var_dump($d);  //这里的 $d 就是 boolean 值 true 
    ?>

    输出为:int(3) bool(true)


鹿角包
175 声望8 粉丝

不苦程序媛