Jadual Kandungan
PHP中的PDO操作学习(三)预处理类及绑定数据" >PHP中的PDO操作学习(三)预处理类及绑定数据
PDOStatement 类" >PDOStatement 类
PDOStatement 错误处理
PDOStatement FETCH_MODE 指定
PDOStatement 获取列数量及字段信息
PDOStatement 打印出一条预处理语句包含的信息
两个 MySQL 扩展不支持的属性
绑定字段" >绑定字段
bindParam
bindValue
bindParam 和 bindValue 的区别
bindColumn
execute 直接传递参数
总结" >总结
Rumah pembangunan bahagian belakang masalah PHP 三分钟带你了解PHP中的预处理类及绑定数据

三分钟带你了解PHP中的预处理类及绑定数据

Jun 17, 2021 pm 05:10 PM
php

本篇文章给大家介绍一下PHP中的预处理类及绑定数据。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

三分钟带你了解PHP中的预处理类及绑定数据

PHP中的PDO操作学习(三)预处理类及绑定数据

要说 PDO 中最强大的功能,除了为不同的数据库提供了统一的接口之外,更重要的就是它的预处理能力,也就是 PDOStatement 所提供的功能。因为它的存在,才让我们可以安心地去使用而不用操心 SQL 语句的拼接不好所带来的安全风险问题。当然,预处理也为我们提升了语句的执行效率,可以说是 PDO 的另一大杀器。

PDOStatement 类

PDOStatement 类其实就是代表一条预处理语句,并在该语句被执行后代表一个相关的结果集。它提供一些方法,让我们能够对这条预处理语句进行操作。

$dns = 'mysql:host=localhost;dbname=blog_test;port=3306;charset=utf8';
$pdo = new PDO($dns, 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

$stmt = $pdo->prepare("select * from zyblog_test_user");

// PDOStatement 对象的内容
var_dump($stmt);
// object(PDOStatement)#2 (1) {
//     ["queryString"]=>
//     string(57) "select * from zyblog_test_user where username = :username"
//   }
Salin selepas log masuk

PDOStatement 对象是通过 PDO 对象的 prepare() 方法返回的一个对象。它没有构造函数,也就是说我们不能直接实例化一个 PDOStatement 对象。它包含一个只读属性,也就是我们要执行的 SQL 语句,保存在 queryString 中。

PDOStatement 错误处理

接下来我们先看看 PDOStatement 的两个错误信息方法。

// 没有指定异常处理状态下的错误信息函数 
$pdo_no_exception = new PDO($dns, 'root', '');
$errStmt = $pdo_no_exception->prepare("select * from errtable");
$errStmt->execute();
var_dump($errStmt->errorCode()); // string(5) "42S02"
var_dump($errStmt->errorInfo());
// array(3) {
//     [0]=>
//     string(5) "42S02"
//     [1]=>
//     int(1146)
//     [2]=>
//     string(40) "Table 'blog_test.errtable' doesn't exist"
//   }
Salin selepas log masuk

在之前的文章中,我们学习过,如果不给 PDO 对象指定错误处理格式的话。它会使用返回错误码和错误信息的方式处理错误。在这种情况下,如果预处理的语句有问题,我们就可以通过 errorCode() 和 errorInfo() 方法来获得错误的代码和错误的详细信息。不过,还是更加推荐指定 PDO 的错误处理方式为抛出异常,就像最上面我们定义的 PDO 对象那样。这样我们就可以通过 try...catch 来处理错误异常了。

PDOStatement FETCH_MODE 指定

// 为语句设置默认的获取模式。
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    var_dump($row);
}
// array(4) {
//     ["id"]=>
//     string(1) "1"
//     ["username"]=>
//     string(3) "aaa"
//     ["password"]=>
//     string(3) "aaa"
//     ["salt"]=>
//     string(3) "aaa"
//   }
// ……
Salin selepas log masuk

为查询结构指定 FETCH_MODE 是通过 setFetchMode() 方法来实现的。之前我们也讲过,通过 PDO 对象的属性可以指定默认的查询结果集模式,不过在 PDOStatement 中,也可以通过这个方法来为当前的这一次预处理语句的查询指定 FETCH_MODE 。

PDOStatement 获取列数量及字段信息

// 返回结果集列数、返回结果集中一列的元数据
$stmt = $pdo->prepare("select * from zyblog_test_user");
$stmt->execute();
var_dump($stmt->columnCount()); // int(4)
var_dump($stmt->getColumnMeta(0)); 
// array(7) {
//     ["native_type"]=>
//     string(4) "LONG"
//     ["pdo_type"]=>
//     int(2)
//     ["flags"]=>
//     array(2) {
//       [0]=>
//       string(8) "not_null"
//       [1]=>
//       string(11) "primary_key"
//     }
//     ["table"]=>
//     string(16) "zyblog_test_user"
//     ["name"]=>
//     string(2) "id"
//     ["len"]=>
//     int(11)
//     ["precision"]=>
//     int(0)
//   }
Salin selepas log masuk

columnCount() 可以返回我们当前查询结果集中的列的数量。关于行的数量获得的方法我们将在下篇文章中再介绍。

getColumnMeta() 方法则是获取结果集中一列的元数据,它的参数是列的序号,从 1 开始的序号,在这里我们获取的是第一列,也就是 id 列的信息。从打印的结果,可以看到这个列的名称、精确度(precisiion)、长度、类型、所属的表名、属性(主键、非空)这些信息。是不是感觉非常有用。不过这个方法是实验性质的,有可能在未来的 PHP 版本中进行修改,不是正式的固定方法。而且并不是所有数据库连接驱动都支持这个方法。

PDOStatement 打印出一条预处理语句包含的信息

$stmt = $pdo->prepare("select * from zyblog_test_user where username=? and salt = ?");
$username = 'aaa';
$stmt->bindParam(1, $username, PDO::PARAM_STR);
$stmt->bindValue(2, 'aaa', PDO::PARAM_STR);
$stmt->execute();
var_dump($stmt->debugDumpParams()); 
// SQL: [60] select * from zyblog_test_user where username=? and salt = ?
// Sent SQL: [68] select * from zyblog_test_user where username='aaa' and salt = 'aaa'
// Params:  2
// Key: Position #0:
// paramno=0
// name=[0] ""
// is_param=1
// param_type=2
// Key: Position #1:
// paramno=1
// name=[0] ""
// is_param=1
// param_type=2
Salin selepas log masuk

debugDumpParams() 也是很好玩的一个方法,它直接打印出当前执行的 SQL 语句的信息,注意,它和 var_dump() 、 php_info() 这类函数一样,是直接打印的,不是将结果返回到一个变量中。还记得我们怎么将这种函数的内容保存到变量中吗?[还搞不懂PHP中的输出缓冲控制?]()。

从打印的结果来看,它能返回真实执行的 SQL 语句以及相关的一些参数信息。对于日常的开发调试来说绝对是一个神器啊。很多小伙伴都会受困于 PDO 预处理的语句如果获取到真实的执行语句。而这个方法只需要我们简单的封装一下,就可以从里面提取出真实的执行语句了哦!

两个 MySQL 扩展不支持的属性

// MySQL 驱动不支持 setAttribute
$stmt->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY);
// Fatal error: Uncaught PDOException: SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support setting attributes

// MySQL 驱动不支持 getAttribute
var_dump($stmt->getAttribute(PDO::ATTR_AUTOCOMMIT));
// Fatal error: Uncaught PDOException: SQLSTATE[IM001]: Driver does not support this function: This driver doesn't support getting attributes
Salin selepas log masuk

这两个方法对于 MySQL 扩展驱动来说是不支持的,但是有其它的数据库是支持的,笔者没有测试过其它数据库,大家可以自行测试一下。

绑定字段

接下来就是重点内容了,在预处理语句中,我们可以使用占位符来绑定变量,从而达到安全处理查询语句的作用。通过占位符,我们就不用去自己拼装处理带单引号的字段内容了,从而避免了 SQL 注入的发生。注意,这里并不是可以处理所有的 SQL 注入问题,比如字符集问题的 宽字节 注入 。

占位符包含两种形式,一种是使用 :xxx 这种形式的名称占位符,: 后面的内容可以是自己定义的一个名称。另一种形式就是使用问号占位符,当使用问号占位符的时候,我们绑定的是字段的下标,下标是从 1 开始的,这点是需要注意的地方。我们直接通过示例来看看。

bindParam

$stmt = $pdo->prepare("insert into zyblog_test_user(username, password, salt) values(:username, :pass, :salt)");

$username = 'ccc';
$passwrod = '333';
$salt = 'c3';

$stmt->bindParam(':username', $username);
$stmt->bindParam(':pass', $password);
$stmt->bindParam(':salt', $salt);

$stmt->execute();

// bindParam 问号占位符
$stmt = $pdo->prepare("insert into zyblog_test_user(username, password, salt) values(?, ?, ?)");

$username = 'ccc';
$passwrod = '333';
$salt = 'c3';

$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->bindParam(3, $salt);

$stmt->execute();
Salin selepas log masuk

在这段代码中,我们分别使用了两种形式的占位符来实现了数据的插入。当然,预处理语句和占位符是任何操作语句都可以使用的。它的作用就是用绑定的值来替换语句中的占位符所在位置的内容。不过它只是使用在 values 、 set 、 where 、 order by 、 group by 、 having 这些条件及对字段的操作中,有兴趣的同学可以试试用占位符来表示一个表名会是什么结果。

bindParam() 方法是绑定一个参数到指定的变量名。在这个方法中,绑定的变量是作为引用被绑定,并且只能是一个变量,不能直接给一个常量。这点我们在后面讲和 bindValue() 的区别时再详细讲解。一些驱动支持调用存储过程的输入/输出操作,也可以使用这个方法来绑定,我们将在后面的文章中讲解。

bindValue

$stmt = $pdo->prepare("insert into zyblog_test_user(username, password, salt) values(:username, :pass, :salt)");

$username = 'ddd';
$passwrod = '444';
$salt = 'd4';

$stmt->bindValue(':username', $username);
$stmt->bindValue(':pass', $password);
$stmt->bindValue(':salt', $salt);

$stmt->execute();
Salin selepas log masuk

咦?它的用法和 bindParam() 一样呀?没错,它们的作用也是一样的,绑定一个参数到值。注意,这里是绑定到值,而 bindParam() 是绑定到变量。在正常情况下,你可以将它们看作是一样的操作,但是,其实它们有很大的不同,我们直接就来看它们的区别。

bindParam 和 bindValue 的区别

首先,bindValue() 是可以绑定常量的。

$stmt = $pdo->prepare("select * from zyblog_test_user where username = :username");

//$stmt->bindParam(':username', 'ccc');
// Fatal error: Uncaught Error: Cannot pass parameter 2 by reference

$stmt->bindValue(':username', 'ccc');

$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    var_dump($row);
}
// array(4) {
//     ["id"]=>
//     string(2) "19"
//     ["username"]=>
//     string(3) "ccc"
//     ["password"]=>
//     string(3) "bbb"
//     ["salt"]=>
//     string(2) "c3"
//   }
// ……
Salin selepas log masuk

如果我们使用 bindParam() 来指定第二个参数值为常量的话,它会直接报错。bindParam() 的第二个参数是作为引用类型的变量,不能指定为一个常量。

其次,因为bindParam() 是以引用方式绑定,它的变量内容是可变的,所以在任何位置定义绑定的变量都不影响它的预处理,而 bindValue() 是定义后就立即将参数进行绑定的,所以下面的代码使用 bindValue() 是无法获得结果的($username 在 bindValue() 之后才赋值)。

$stmt = $pdo->prepare("select * from zyblog_test_user where username = :username");

$stmt->bindValue(':username', $username);
$username = 'ccc';

$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    var_dump($row);
}
//
Salin selepas log masuk

必须要保证变量在 bindValue() 之前被赋值。

$username = 'ccc';
$stmt->bindValue(':username', $username);
Salin selepas log masuk

当然,bindParam() 就不存在这样的问题了,我们可以在 bindParam() 之后再给它指定的变量赋值。

$stmt = $pdo->prepare("select * from zyblog_test_user where username = :username");

$stmt->bindParam(':username', $username);
$username = 'ddd';

$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    var_dump($row);
}
// array(4) {
//     ["id"]=>
//     string(1) "8"
//     ["username"]=>
//     string(3) "ddd"
//     ["password"]=>
//     string(3) "bbb"
//     ["salt"]=>
//     string(2) "d4"
//   }
//   ……
Salin selepas log masuk

这下对 bindParam() 和 bindValue() 的区别就非常清楚了吧?总结一下:

  • bindParam() 必须绑定变量,变量是引用形式的参数,只要在 execute() 之前完成绑定都可以

  • bindValue() 可以绑定常量,如果是绑定的变量,那么变量赋值要在 bindValue() 语句执行之前完成,否则绑定的就是一个空的数据

bindColumn

这个方法是用于绑定查询结果集的内容的。我们可以将查询结果集中指定的列绑定到一个特定的变量中,这样就可以在 fetch() 或 fetchAll() 遍历结果集时通过变量来得到列的值。

这个方法在实际应用中用到的比较少,所以很多小伙伴可能是只闻其名不见其身。我们还是通过代码来看看。

$stmt = $pdo->prepare("select * from zyblog_test_user");

$stmt->execute();

$stmt->bindColumn(1, $id);
$stmt->bindColumn(2, $username, PDO::PARAM_STR);
$stmt->bindColumn("password", $password);
$stmt->bindColumn("salt", $salt, PDO::PARAM_INT); // 指定类型强转成了 INT 类型

// 不存在的字段
// $stmt->bindColumn(5, $t); 
//Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: Invalid column index

while($row = $stmt->fetch(PDO::FETCH_BOUND)){
    $data = [
        'id'=>$id,
        'username'=>$username,
        'password'=>$password,
        'salt'=>$salt,
    ];
    var_dump($data);
}
// array(4) {
//     ["id"]=>
//     string(1) "1"
//     ["username"]=>
//     string(3) "aaa"
//     ["password"]=>
//     string(3) "aaa"
//     ["salt"]=>
//     int(0)
//   }
//   array(4) {
//     ["id"]=>
//     string(1) "2"
//     ["username"]=>
//     string(3) "bbb"
//     ["password"]=>
//     string(3) "bbb"
//     ["salt"]=>
//     int(123)
//   }
// ……

// 外部获取变量就是最后一条数据的信息
$data = [
    'id'=>$id,
    'username'=>$username,
    'password'=>$password,
    'salt'=>$salt,
];
print_r($data);
// Array
// (
//     [id] => 2
//     [username] => bbb
//     [password] => bbb
//     [salt] => bbb
// )
Salin selepas log masuk

在代码中,我们使用的是 * 来获得的查询结果集。然后就可以通过问号占位符或者列名来将列绑定到变量中。接着在 fetch() 的遍历过程中,就可以通过变量直接获取每一条数据的相关列的值。需要注意的是,为变量赋值的作用域仅限于在执行 fetch() 方法之后。从代码的结构中我们就可以看出,bindColumn() 方法对于变量也是作为引用的方式绑定到 PDOStatement 对象内部的,所以 fetch() 在处理的时候就直接为这些变量赋上了值。

bindCloumn() 方法后面的参数是可选的字段类型,这个参数在 bindParam() 和 bindValue() 中都是存在的,也都是可选的。如果获取的类型和我们绑定时定义的类型不同,那么 PDOStatement 就会强转为绑定时指定的类型。例如上面例子中我们将本身为 varchar 类型的 salt 字段强转为 int 类型之后就输出的都是 int 类型了。除了这个参数之外,还有一些其它可选的参数,大家可以自行查阅相关的文档。

fetch() 循环结束后,变量中依然保留着最后一行结果集的内容。所以在使用的时候要注意如果外部有其它地方使用这些变量的话,是否需要重新赋值或者清理掉它们。

execute 直接传递参数

最后,如果我们不想这么麻烦地去绑定字段或者变量,也可以直接在 execute() 方法中直接传递参数,它是类似于 bindValue() 的形式进行字段绑定的。

$stmt = $pdo->prepare("insert into zyblog_test_user(username, password, salt) values(:username, :pass, :salt)");
$stmt->execute([
    ':username'=>'jjj',
    ':pass'=>'888',
    ':salt'=>'j8'
]);
// 使用问号占位符的话是按从0开始的下标
$stmt = $pdo->prepare("insert into zyblog_test_user(username, password, salt) values(?, ?, ?)");
$stmt->execute(['jjjj','8888','j8']);
Salin selepas log masuk

execute() 的这个绑定参数是一个数组,在使用问号占位符的时候需要注意,在这里,按数组的下标来说,它们是从 0 开始算位置的。

另外需要注意的是,PDOStatement 对象的操作都是使用 execute() 方法来进行语句执行的。这个方法只会返回一个布尔值,也就是成功或者失败。不像 PDO 对象的 exec() 方法返回的是受影响的条数。如果是查询类的语句,我们需要在 execute() 之后调用 fetch() 之类的方法遍历结果集。而增、删、改之类的操作,则需要通过 rowCount() 来获得返回的执行结果条数。相关的内容我们也将在之后的文章一起详细讲解。

总结

划重点的时刻又到咯!今天我们学习的主要是 PDOStatement 对象的一些不太常用但很好玩的方法,另外就是占位符绑定的问题。其中最主要的就是 bindParam() 和 bindValue() 的区别。下篇文章我们主要就是要学习 PDOStatement 中的查询相关的操作,这个可不能丢呀,大家一定不要迟到!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/PHP%E4%B8%AD%E7%9A%84PDO%E6%93%8D%E4%BD%9C%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B8%89%EF%BC%89%E9%A2%84%E5%A4%84%E7%90%86%E7%B1%BB%E5%8F%8A%E7%BB%91%E5%AE%9A%E6%95%B0%E6%8D%AE.php
Salin selepas log masuk

推荐学习:php视频教程

Atas ialah kandungan terperinci 三分钟带你了解PHP中的预处理类及绑定数据. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles