php入门随手记

代码规范

<?php
    // php代码内容
    echo "hello php";
?>

简介:

  1. php是一门弱类型语言,不需要声明变量的类型

1.注释

<?php
    // 单行注释
?>
<?php
    /*
    多行注释
    多行注释
    */
?>

2.变量

$valueName = value;
变量名必须以字母或下划线作为开始

<?php
    $a=1;
    $b=2;
    $sum = $a + $b;
    echo $sum;
?>

3.函数与作用域

php提供了超1000个内置函数

global关键字

在函数外定义的变量具有全局作用域,在函数内部访问全局变量需要使用global关键字

<?php
    $x=5;
    function mytest(){
        global $x;
        echo $x;
    }
    mytest();
?>

函数传参

<?php
    $x=5;
    function mytest($value){
        global $x;
        echo $x;
        echo $value;
    }
    mytest("<h1>这是一个value</h1>");
?>

函数返回值

<?php
    $x=5;
    function mytest($value){
        global $x;
        echo $x;
        echo $value;
        return 666;
    }
    $num = mytest("<h1>这是一个value</h1>");
    echo $num;
?>

static作用域

<?php
    function mytest(){
        static $x = 0;
        echo $x;
        $x++;
        echo PHP_EOL;//换行符
    }

    mytest();
    mytest();
    mytest();
?>

每次调用函数时,声明为static的变量为静态变量,即函数运行结束时不会被删除,仍保持着上一次的值

4.php可以嵌入html代码(html也可以嵌入php代码)

<?php
    echo "<hr>";
    echo "<a href='https://www.baidu.com'>百度一下</a>";
?>

5.并置运算符

在php中只有一个字符串运算符,那就是并置运算符:.

作用是把两个字符串连接起来

<?php
    function test(){
        $str1 = "Hello World!";
        $str2 = "你好,世界!";
        echo $str1 . " " . $str2;
    }
    test();
?>

6.php的基础类型与类型转换

基础类型

PHP 的基础类型主要是

  • 标量:int、float、string、bool

  • 复合:array、object

  • 特殊:resource、NULL

类型转换

$str1 = string(111);
<?php
    $str1 = "hello world!";
    $target = "world";
    echo $target . "所在的位置为:" . (string) strpos($str1,$target);
?>

7.php运算符

1. 算术运算符

运算符 示例 说明
+ $a + $b 加法
- $a - $b 减法
* $a * $b 乘法
/ $a / $b 除法
% $a % $b 取模(余数)
** $a ** $b 幂运算(PHP 5.6+)

2. 赋值运算符

运算符 示例 说明
= $a = 10 赋值
+= $a += 5 加后赋值
-= $a -= 5 减后赋值
*= $a *= 5 乘后赋值
/= $a /= 5 除后赋值
%= $a %= 5 取模后赋值
.= $a .= "b" 字符串连接并赋值

3. 比较运算符

运算符 示例 说明
== $a == $b 等于(值相等)
=== $a === $b 全等(值和类型都相等)
!=<> $a != $b 不等
!== $a !== $b 不全等
< $a < $b 小于
> $a > $b 大于
<= $a <= $b 小于等于
>= $a >= $b 大于等于
<=> $a <=> $b 太空船运算符:小于返回 -1,等于返回 0,大于返回 1(PHP 7+)

4. 递增 / 递减运算符

运算符 示例 说明
++$a 前置递增 先加 1,再返回值
$a++ 后置递增 先返回值,再加 1
--$a 前置递减 先减 1,再返回值
$a-- 后置递减 先返回值,再减 1

5. 逻辑运算符

运算符 示例 说明
&& $a && $b 与(and)
|| $a || $b 或(or)
! !$a
and $a and $b 与(优先级比 && 低)
or $a or $b 或(优先级比 || 低)
xor $a xor $b 异或

6. 位运算符

运算符 示例 说明
& $a & $b 按位与
| $a | $b 按位或
^ $a ^ $b 按位异或
~ ~$a 按位取反
<< $a << 2 左移
>> $a >> 2 右移

7. 字符串运算符

运算符 示例 说明
. $a . $b 字符串拼接
.= $a .= $b 拼接并赋值

8. 数组运算符

运算符 示例 说明
+ $a + $b 数组合并(不覆盖相同键值)
== $a == $b 数组是否相等(键值对相同即可)
=== $a === $b 数组是否全等(键值对和顺序、类型完全相同)
!= $a != $b 数组不相等
!== $a !== $b 数组不全等

9. 类型运算符

运算符 示例 说明
instanceof $obj instanceof ClassName 判断对象是否某个类的实例

10. 其他运算符

运算符 示例 说明
`命令` $out = `ls -l`; 执行系统命令,返回结果
@ @$a = 1/0; 错误控制运算符(忽略错误,不推荐过度使用)
?: $a = $x ? $y : $z; 三元运算符
?? $a = $x ?? $y; Null 合并运算符(PHP 7+)

8.选择结构

if...elseif...else

<?php
    $t = 10;
    if($t > 10){
        echo "大于10";
    }elseif($t == 10){
        echo "等于10";
    }else{
        echo "小于10";
    }
?>

switch

<?php
    $value = 3;
    switch($value){
        case 1: 
            echo "值为1";
            break;
        case 2:
            echo "值为2";
            break;
        case 3:
            echo "值为3";
            break;
        default:
            echo "未知的值";
            break;
    }
?>

9.循环结构

while循环

<?php
    while(条件){
        // 循环体
    }
?>

do...while

<?php
    do{
        // 循环体
    }while(循环条件);
?>

for循环

for(初始值;条件;增量){
    // 循环体
}

for...each

普通数组:

<?php
    $cars = array("Volvo", "BMW", "Toyota");

    foreach($cars as $value){
        echo " value=" . $value . "<br>";
    }
?>

关联数组:

<?php
    $age=array();
    $age["Peter"] = "35";
    $age["Ben"] = "37";
    $age["Joe"] = "43";
    echo "Peter is " . $age["Peter"] . " years old."; 

    foreach($age as $key=>$value){
        echo "key=" . $key . " value=" . $value . "<br>";
    }
?>

10.数组

基本格式

<?php
    $cars = array("Volvo","BMW","Toyota");
    echo "I like " . $cars[0] . "," . $cars[1] . " and" . $cars[2] . ".";
?>

在php中创建数组

在php中,array()函数用于创建数组

array();

或直接创建

$a = [1,2,3];//也可以创建数组

在php中有三种类型的数组:

  • 数值数组: 带有数字id键的数组
  • 关联数组: 带有指定的键的数组,每个键关联一个值(字典?)
  • 多维数组: 包含一个或多个数组的数组

1.数值数组

有两种创建数值数组的方法:

  1. 自动分配id键
$cars = array("Volvo","BMW","Toyota");
  1. 人工分配id键
$cars = array();
$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";

访问未存入数据的区域

<?php
    $lists = array();
    $lists[0] = "test1";
    $lists[2] = "test2";
    echo $lists[0];
    echo $lists[1];  //警告,并生成空字符串
    echo $lists[2];
    echo $lists[3];  //警告,并生成空字符串
?>    

2.关联数组

有两种创建关联数组的方法:

<?php
    $age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    echo "Peter is " . $age["Peter"] . " years old.";
?>
<?php
    $age=array();
    $age["Peter"] = "35";
    $age["Ben"] = "37";
    $age["Joe"] = "43";
    echo "Peter is " . $age["Peter"] . " years old."; 
?>

for...each遍历数组

11.类与对象

创建类

<?php
    class Fruit {
        public $name;
        public $color;

        function set_name($name){
            $this->name = $name;
        }
        function get_name(){
            return $this->name;
        }
    }
?>

类的实例化与调用方法

<?php
    class Fruit {
        public $name;
        public $color;

        function set_name($name){
            $this->name = $name;
        }
        function get_name(){
            return $this->name;
        }
    }

    $apple = new Fruit();
    $banana = new Fruit();
    // 通过调用Fruit对象中的set_name方法来修改属性值
    $apple->set_name("Apple");
    $banana->set_name("Banana");
    // 通过调用get_name方法来获取属性值
    echo $apple->get_name();
    echo "<br>";
    echo $banana->get_name();
?>

静态方法

1.静态方法的创建与调用类名::方法名

<?php
class MathUtil {
    // 定义一个静态方法
    public static function add($a, $b) {
        return $a + $b;
    }
}

// 直接通过类名调用静态方法(不需要创建对象)
echo MathUtil::add(3, 5);  // 输出 8

// 也可以通过对象调用(但不推荐)
$obj = new MathUtil();
echo $obj::add(10, 20);    // 输出 30

2.静态属性的调用self::$属性名

<?php
class Counter {
    // 定义静态属性(所有对象共享)
    private static $count = 0;

    // 定义静态方法:计数器加 1
    public static function increment() {
        self::$count++;
    }

    // 定义静态方法:获取当前计数
    public static function getCount() {
        return self::$count;
    }
}

// 使用静态方法操作静态属性
Counter::increment();
Counter::increment();
echo Counter::getCount();  // 输出 2

Counter::increment();
echo Counter::getCount();  // 输出 3

魔术方法

1. __construct() 构造方法

对象被创建时自动执行。

<?php
class Demo {
    public function __construct() {
        echo "对象已创建!\n";
    }
}

$obj = new Demo();

注意:在同一个类中只能声明一个构造方法,原因是,php不支持方法重载


2. __destruct() 析构方法

对象被销毁前自动执行。可以在一个类被销毁前完成一些功能,比如关闭文件、释放结果等。

<?php
class Demo {
    public function __destruct() {
        echo "对象被销毁!\n";
    }
}

$obj = new Demo();
unset($obj); // 触发析构方法

3. __get() / __set()

访问不存在或不可访问的属性时触发。

<?php
class Demo
{
    private $data = [];

    public function __get($name)
    {
        return $this->data[$name] ?? "属性 {$name} 不存在\n";
    }

    public function __set($name, $value)
    {
        $this->data[$name] = $value;
        echo "设置 {$name} = {$value}\n";
    }
}

$obj = new Demo();
echo $obj->name;      // 触发 __get
$obj->name = "Tom";   // 触发 __set
echo $obj->name;      // 触发 __get
?>

4. __isset()

使用 isset() 或 empty() 判断属性时触发。

<?php
class Demo {
    private $data = ["name" => "Tom"];

    public function __isset($name) {
        echo "检查属性 {$name} 是否存在\n";
        return isset($this->data[$name]);
    }
}

$obj = new Demo();
var_dump(isset($obj->name)); // 触发 __isset

5. __unset()

使用 unset() 删除属性时触发。

<?php
class Demo {
    private $data = ["name" => "Tom"];

    public function __unset($name) {
        echo "删除属性 {$name}\n";
        unset($this->data[$name]);
    }
}

$obj = new Demo();
unset($obj->name); // 触发 __unset

6. __toString()

对象被当成字符串时触发。

<?php
class Demo {
    public function __toString() {
        return "这是一个 Demo 对象\n";
    }
}

$obj = new Demo();
echo $obj; // 触发 __toString

7. __sleep()

对象被 serialize() 序列化时触发。

<?php
class Demo {
    private $name = "Tom";

    public function __sleep() {
        echo "对象被序列化\n";
        return ["name"]; // 返回需要序列化的属性
    }
}

$obj = new Demo();
$ser = serialize($obj); // 触发 __sleep
echo $ser;

8. __wakeup()

对象被 unserialize() 反序列化时触发。

<?php
class Demo {
    private $name;

    public function __wakeup() {
        echo "对象被反序列化\n";
    }
}

$ser = 'O:4:"Demo":1:{s:6:"' . "\0" . 'Demo' . "\0" . 'name";s:3:"Tom";}';
$obj = unserialize($ser); // 触发 __wakeup

9. __call()

在对象中调用一个不可访问的方法时调用

function __call(string $function_name,array $arguments){
    // 方法体
}

在 PHP 中,__call($name, $arguments) 的 方法签名是固定的,只能接收两个参数:

  • $name → 被调用的方法名

  • $arguments → 调用时传入的参数,无论多少个参数,都会被自动收集到一个数组里。

所以 不存在参数数量不一致的问题。
哪怕调用的时候传入 0 个、1 个、10 个参数,PHP 都不会报错,而是把这些参数打包成一个数组传给 $arguments

<?php
class Demo {
    public function __call($name, $arguments) {
        echo "你调用的方法 '{$name}' 不存在!\n";
        echo "传入的参数有:" . implode(", ", $arguments) . "\n";
    }
}

$obj = new Demo();

// 调用一个不存在的方法
$obj->hello("world", 123);

作用:用__call()方法可以避免当调用的方法不存在时产生错误,而意外的导致程序终止

10. __callstatic()

当你调用 不存在的静态方法 时,PHP 会自动触发 __callStatic($name, $arguments)。与__call()方法类似

<?php
class Demo {
    public static function __callStatic($name, $arguments) {
        echo "你调用的静态方法 '{$name}' 不存在!\n";
        echo "参数个数: " . count($arguments) . "\n";
        echo "参数内容: " . implode(", ", $arguments) . "\n";
    }
}

// 调用不存在的静态方法
Demo::hello("world", 123);
posted @ 2026-07-02 17:52  畅畅c  阅读(0)  评论(0)    收藏  举报