1. __construct()
- 功能:构造函数,在创建对象时自动调用,用于初始化对象的属性。
- 人话:类被使用就会被调用
- 示例:
1 | class Person { |
2. __destruct()
- 功能:析构函数,在对象被销毁时自动调用,通常用于释放对象占用的资源,如关闭文件、数据库连接等。
- 人话:整体脚本结束时候调用
- 示例:
1 | class DatabaseConnection { |
3. __toString()
功能:当对象被当作字符串使用时自动调用,必须返回一个字符串。
触发
__toString方法的情况触发方式 描述 示例代码 字符串拼接 对象参与字符串拼接操作时,触发 __toString方法。在需要将对象与字符串组合输出的场景中会用到。php class StringableClass { public function __toString() { return "触发 __toString"; } } $obj = new StringableClass(); echo "拼接结果:" . $obj;echo、print语句直接使用 echo或print输出对象时,触发__toString方法,是一种常见的输出对象字符串表示的方式。php class StringableClass { public function __toString() { return "触发 __toString"; } } $obj = new StringableClass(); echo $obj;printf、sprintf函数在使用字符串格式化函数,将对象作为字符串参数传递时,触发 __toString方法,用于格式化输出对象的字符串表示。php class StringableClass { public function __toString() { return "触发 __toString"; } } $obj = new StringableClass(); printf("格式化结果:%s", $obj);implode函数当对象在数组中,使用 implode函数将数组转换为字符串时,触发对象的__toString方法,用于将包含对象的数组转换为字符串。php class StringableClass { public function __toString() { return "触发 __toString"; } } $obj = new StringableClass(); $arr = [$obj]; echo implode(", ", $arr);字符串强制类型转换 使用 (string)进行强制类型转换时,触发__toString方法,用于将对象显式转换为字符串类型。php class StringableClass { public function __toString() { return "触发 __toString"; } } $obj = new StringableClass(); $str = (string)$obj; echo $str;json_encode处理对象数组时当使用 json_encode对包含对象的数组进行编码时,如果对象实现了__toString方法,会触发该方法,用于在 JSON 编码时获取对象的字符串表示。php class User { public function __toString() { return "User Object"; } } $user = new User(); $arr = [$user]; echo json_encode($arr);setcookie函数在设置 cookie 的值时,如果传入的是一个实现了 __toString方法的对象,会触发该方法,用于将对象的值设置为 cookie 的值。php class CookieValue { public function __toString() { return "cookie_value"; } } $cookieValue = new CookieValue(); setcookie('test_cookie', $cookieValue);Twig 模板引擎输出对象 在 Twig 模板中输出对象时,如果对象实现了 __toString方法,会触发该方法,用于在模板中展示对象的字符串表示。php require_once 'vendor/autoload.php'; class MyObject { public function __toString() { return "My Object String"; } } $loader = new \Twig\Loader\ArrayLoader([ 'index.html' => 'Object value: {{ myObject }}' ]); $twig = new \Twig\Environment($loader); $myObject = new MyObject(); echo $twig->render('index.html', ['myObject' => $myObject]);Smarty 模板引擎使用对象 在 Smarty 模板中使用对象时,如果对象实现了 __toString方法,会触发该方法,用于在 Smarty 模板中展示对象的字符串表示。php require_once 'libs/Smarty.class.php'; class SmartyObject { public function __toString() { return "Smarty Object String"; } } $smarty = new Smarty(); $smartyObject = new SmartyObject(); $smarty->assign('myObject', $smartyObject); $smarty->display('index.tpl');人话:被强制为echo输出时候调用
示例:
1 | class Book { |
4. __call()
- 功能:当调用一个对象中不存在的方法时自动调用,接收两个参数:方法名和参数数组。
- 人话:使用同一个类中不可访问的方法时候调用(比如私有和不存在的)
- 示例:
1 | class MyClass { |
5. __callStatic()
功能:当调用一个类中不存在的静态方法时自动调用,接收两个参数:方法名和参数数组。
静态是什么?
1
2
3使用static进行定义
echo MathUtil::add(2, 3); // 输出:5
::进行引用示例:
1 | class MyStaticClass { |
6. __get()
- 功能:当访问一个对象中不存在或不可访问的属性时自动调用,接收一个参数:属性名。
- 人话:调用不存在的属性时候调用
- 示例:
1 | class MyObject { |
7. __set()
- 功能:当给一个对象中不存在或不可访问的属性赋值时自动调用,接收两个参数:属性名和属性值。
- 示例:
1 | class MyObject { |
8. __isset()
- 功能:当使用
isset()函数检查一个对象中不存在或不可访问的属性时自动调用,接收一个参数:属性名。 - 示例:
1 | class MyObject { |
9. __unset()
功能:当使用
unset()函数删除一个对象中不存在或不可访问的属性时自动调用,接收一个参数:属性名。示例:
1 | class MyObject { |
10. __clone()
- 功能:当使用
clone关键字克隆一个对象时自动调用,用于自定义对象的克隆行为。 - 示例:
1 | class MyClass { |
11.__invoke
一些会触发的函数:
| return | 直接返回 | |
|---|---|---|
| 直接将对象当作函数调用 | 当代码中使用 对象名() 的形式调用对象时,会触发 __invoke 方法。这种方式是最直观的调用对象 __invoke 方法的形式,就像调用普通函数一样使用对象。 |
php class CallableClass { public function __invoke() { echo "触发 __invoke"; } } $obj = new CallableClass(); $obj(); |
call_user_func 函数 |
该函数用于调用一个回调函数,当传入的回调是一个对象时,会触发对象的 __invoke 方法。它可以动态地调用可调用对象,在需要灵活调用不同函数或对象的场景中很有用。 |
php class CallableClass { public function __invoke() { echo "触发 __invoke"; } } $obj = new CallableClass(); call_user_func($obj); |
call_user_func_array 函数 |
与 call_user_func 类似,但可以传入数组形式的参数,当传入的回调是对象时,触发 __invoke 方法。适用于需要传递多个参数给可调用对象的情况。 |
php class CallableClass { public function __invoke($param) { echo "触发 __invoke,参数:$param"; } } $obj = new CallableClass(); call_user_func_array($obj, ['test']); |
array_map 函数 |
将回调函数作用到给定数组的每个元素上。当回调函数是一个可调用对象时,会触发该对象的 __invoke 方法,用于对数组元素进行批量处理。 |
php class Multiplier { public function __invoke($num) { return $num * 2; } } $numbers = [1, 2, 3]; $multiplier = new Multiplier(); $result = array_map($multiplier, $numbers); print_r($result); |
array_filter 函数 |
用回调函数过滤数组中的元素。若回调函数是一个可调用对象,会触发其 __invoke 方法,用于筛选出符合条件的数组元素。 |
php class EvenChecker { public function __invoke($num) { return $num % 2 === 0; } } $numbers = [1, 2, 3, 4]; $evenChecker = new EvenChecker(); $result = array_filter($numbers, $evenChecker); print_r($result); |
usort 函数 |
使用用户自定义的比较函数对数组进行排序。当比较函数是一个可调用对象时,会触发该对象的 __invoke 方法,用于实现自定义的排序规则。 |
php class NumberComparator { public function __invoke($a, $b) { return $a - $b; } } $numbers = [3, 1, 2]; $comparator = new NumberComparator(); usort($numbers, $comparator); print_r($numbers); |
array_reduce 函数 |
用回调函数迭代地将数组简化为单一的值。若回调函数是可调用对象,会触发 __invoke 方法,用于对数组元素进行累积计算。 |
php class Summer { public function __invoke($carry, $item) { return $carry + $item; } } $numbers = [1, 2, 3]; $summer = new Summer(); $result = array_reduce($numbers, $summer, 0); echo $result; |