PHP基础知识和语法点

793 阅读5分钟

这是我参与更文挑战的第21天,活动详情查看: 更文挑战

PHP相关知识和语法学习或查询,可参考php.net的文档:PHP 手册PHP教程

PHP相关知识

PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。

PHP 文件

  • PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
  • PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
  • PHP 文件的默认文件扩展名是 ".php"

PHP知识点

  1. 开始标记<?php和结束标记?>。开始标记和结束标记之间的内容作为PHP代码解析和执行。
  2. 获取get请求参数使用$_GET
<body>
  <div id="head"></div>
  <div id="content">
    <?php
      $id=$_GET['id'];// 获取get查询字符串参数
      if($id=='1'){
        // 读取1.txt文件内容 并 输出echo
        $str = file_get_contents('./1.txt');
        echo $str;
      }      
    ?>
  </div>
  <div id="footer"></div>
</body>
  1. echo输出内容

echo - 可以输出一个或多个字符串 print - 只允许输出一个字符串,返回值总为 1

<?php
echo "我要学 PHP!<br>";
echo "这是一个", "字符串,", "使用了", "多个", "参数。";

print "我要学习 PHP!";
?>
  1. 使用///**/进行注释
  2. 变量以$开头,没有声明变量的命令,变量在第一次赋值时被创建,直接使用即可,字母数字下划线组成(数字不能在首位),初次定义变量最好给定值。
  3. 常量不能被更改,定义常量define('PI',3.1415926),一个常量由英文字母、下划线、和数字组成,数字不能为首字母(常量名不需要加$修饰符)。常量在整个脚本中都可以使用。常量只能是boolean、integer、float、string类型。
  4. define('PI',3.1415926)是个函数,如果常量定义过返回为true,没定义过返回false。
  5. var_dump()用于输出变量的相关信息。print_r()用于打印变量,以更容易理解的形式展示。
  6. PHP数据类型:

标量类型 —— String(字符串), Integer(整型,PHP_INT_MAXPHP_INT_MIN), Float(浮点型,浮点数是带小数部分的数字,或是指数形式), Boolean(布尔型);

标量值不能拆分为更小的单元。

复合类型 —— Array(数组), Object(对象), callable(可调用);

特殊类型 —— resource(资源) , NULL(空值,null不区分大小写)。

  1. 数组。使用array()[](>=php5.4)定义数组

count()函数返回数组的长度

  • 索引数组:带有数字索引的数组。
  • 关联数组:带有指定键的数组。使用分配给数组的指定键的数组(键为字符串string或整型int)
  • 多维数组 - 包含一个或多个数组的数组
<?php 
   // 创建索引数组
   $cars=array("Volvo","BMW","Toyota"); 
   // $cars=["Volvo","BMW","Toyota"];
   // $cars[0]="Volvo";
   // $cars[1]="BMW";
   // $cars[2]="Toyota";
   var_dump($cars);
 
   echo count($cars); // count()数组长度

  // 遍历索引数组
   $arrlength=count($cars);
   for($i=0;$i<$arrlength;$i++) {
     echo $cars[$i];
     echo "<br>";
   }

   echo "<br>";

   $arrlength=count($cars);
   
    // 数组元素类型不一致
    $stu0 = array('张三',13);

   // 关联数组 关联数组是使用分配给数组的指定键的数组(键为字符串string或整型int)。
   // 两种创建关联数组的方式
   $stu1 = array(
     'name'=>'张三',
     'age'=> 13
   );
   $stu2['name']='李四';
   $stu2['age']=14;

   //遍历
   foreach($stu2 as $key=>$value)
   {
       echo $key . " 是:" . $value;
       echo "<br>";
   }

?>
  1. 哪些值等于FALSE
    1. 布尔值FALSE本身
    1. 整型0
    1. 浮点型0.0
    1. 空字符串和字符串"0"
    1. 不包括任何元素的数组
    1. 特殊类型NULL(包括尚未赋值的变量)
    1. 从空标记生成SimpleXML对象

所有其他值都被认为是TRUE(包括任何资源 和 NAN)

(bool)类型转换

<?php
  $int_a=0;
  var_dump( (bool)$int_a ); // false
?>
  1. 表达式:任何有值的东西。

表达式是PHP最重要的基石,几乎所写的任何东西都是一个表达式。

最基本的表达式形式是常量和变量。如$a = 5,“5”的值为5,“5”是一个值为5的表达式;$b = $a$a是一个值也为5的表达式。

函数也是表达式。

PHP 是一种面向表达式的语言

  1. 运算符
  • 算数运算符

  • 赋值运算符

  • 递增递减运算符

  • 比较运算符

  • 逻辑运算符

  • 字符串运算符

  1. 流程控制
  • 顺序 标准执行时是顺序执行

  • 条件

1)- if语句

一种直接使用if(...elseif...else)语句条件判断和执行。

另一种使用<?php if(true): ?><?php endif; ?>在网页中实现条件语句(<?php if(true): ?><?php elseif: ?><?php else: ?><?php endif; ?>)

<?php
    if(true){
        echo '<h1  class="head">这是一个标题</h1>';
        echo '<h1  class=\'head\'>这是一个标题</h1>';
    }
    else if(true){

    }
    elseif(true){

    }
    else{

    }
?>

<?php if(true): ?>
    <h1  class="head">这是一个标题</h1>
<?php endif; ?>

2)- switch语句

使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

switch (expression)
{
case label1:
  // expression = label1 时执行的代码 ;
  break;  
case label2:
  // expression = label2 时执行的代码 ;
  break;
default:
  // 表达式的值满足以上所有case时执行的代码;
}
  • 循环

1)- while循环

while(true){

}

替代语法

<?php while(): ?>
 // code
<?php endwhile; ?>

2)- foreach循环

foreach( $as as $a ){

}

foreach( $as as $a_key => $a_value ){

}

替代语法

<?php foreach(expr): ?>
 // 循环体
<?php endforeach; ?>`

3)- for循环

可以指定循环次数。

for (init counter; test counter; increment counter) {
  code to be executed;
}

for ($x=0; $x<=10; $x++) {
  echo "数字是:$x <br>";
} 
  1. 函数
<?php
  function functionName($a,$b){

  }

  // 默认值参数
  function functionName($a,$b=4){

    // 返回值
    // return $value
  }
?>
  1. PHP变量作用域:变量的作用域是脚本中变量可被引用/使用的部分(范围)。

PHP 有四种不同的变量作用域:local、global、static、parameter

  • 局部和全局作用区

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。

PHP 将所有全局变量存储在一个名为$GLOBALS[name]的数组,函数内部可通过$GLOBALS访问

<?php
$x=5;
$y=10;
 
function myTest()
{
    global $x,$y;
    $y=$x+$y;
}
 
myTest();
echo $y; // 输出 15
?>

对应着$GLOBALS方式

<?php
$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
 
myTest();
echo $y;
?>
  • Static作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,如果希望某个局部变量不要被删除。可以在第一次声明变量时使用static关键字:

 <?php
 function myTest()
 {
     static $x=0;
     echo $x;
     $x++;
     echo PHP_EOL;    // 换行符
 }
  
 myTest();  //0
 myTest();  //1
 myTest();  //2
 ?>
  • parameter参数作用域 (形参)

参数声明作为函数声明的一部分。

function myTest($x)
{
    echo $x;
}

myTest('Galois');
myTest(8888);
  1. 类和对象

属性声明是由关键字 public,protected 或者 private 开头,然后跟一个普通的变量声明来组成。

var关键字的用法总结(var在类外用报错)

类属性必须带限定词,php中类属性必须定义为公有(public),受保护(protected),私有(private)之一。所以如果没有那三个修饰符,必须用var,使用var从PHP5开始被视为public,var是public的别名。

<?php
  // 继承
  class ClassName extends ParentClass{
      /* 成员变量 */
      var $url;
      var $title;

    // 构造函数
    function __construct( $par1, $par2 ) {
       $this->url = $par1;
       $this->title = $par2;
    }

    // 析构函数
    function __destruct() {
       print "销毁 " . $this->name . "\n";
   }

    function printIP()
    {
        echo $this->url;
        echo $this->title;
    }
  }

  // 创建对象
  $obj=new ClassName();
?>
  1. 文件拆分

模块化编程。使用requireinclude关键字引入其他php文件,之后既可以使用这个文件中的php代码、函数、变量等

require_onceinclude_once可以多次引入同一文件而不报错。两者均为只引入一次,不会重复引入。

// 文件a.php
<?php
    function add($a,$b){
      return $a+$b;
    }
?>

// 文件b.php
<?php
require './a.php';  // 报错级别比include高
// include './a.php'; // 引入错误后面代码仍可执行

// require_once('./a.php');  // require_once "./a.php";
// include_once "./a.php";   // include_once('./a.php');

$c=add(3,4);
echo $c;
?>
  1. 常用函数
  • printf()输出格式化的字符串
  • sprintf()返回格式化的字符串
  • print()输出(一个)字符串,只能有一个参数。
<?php
  $name="张三";
  $age=16;

  // 格式化字符串输出
  printf('我是%s,今年%d岁',$name,$age);  // 会返回结果字符串的长度

  // 返回格式化字符串
  $str=sprintf('我是%s,今年%d岁',$name,$age);
  echo $str;

  print('打印输出');
  // 退出当前执行,后面代码不再执行
  exit();
?>
  • print_r()以一定格式(好看的格式)打印变量

bool print_r ( mixed $expression [, bool $return ] ) 参数说明:

$expression: 要打印的变量,如果给出的是 string、integer 或 float 类型变量,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object与数组类似。

$return: 可选,如果为 true 则不输出结果,而是将结果赋值给一个变量,false则直接输出结果。

  1. php单引号和双信号

单引号中的内容不会经过解释(\n不会输出为换行,变量也不会被解析为变量的值等),即内容会与输入的内容一致

双引号中的内容将会被解释,即解析内容中的变量。

    1. 双引号中插入单引号,若单引号中存在变量,变量会被解释
    1. 因为双引号的内容会被解释,所以双引号的效率会比单引号的效率低,所以,在PHP代码中尽量使用单引号;若包含变量需要进行解析时,则使用双引号
  1. <pre></pre>标签,用于保留换行等内容原样输出