重载是一种很多程序语言的特性, 只允许存在同一名称但不同签章的方法, 签章指的是参数的类型与个数, 但 PHP 不支持这特性, 但可以通过 PHP 提供的魔术方法 /_/call //_callStatic 来模拟方法重载
<?php
// public __call(string $name, array $arguments): mixed
// 当调用物件里面不可访问的方法时会调用 __call, 并将方法名当第一个参数传入,
// 方法的参数全部变成array 当第二个参数传入
class Math
{
public function __call($fnName, $fnArgs)
{
if ($fnName === 'add') {
$sum = 0;
foreach($fnArgs as $arg)
{
$sum += $arg;
}
echo implode(',', $fnArgs).'总和是: '.$sum."\n";
}
}
}
$math = new Math();
$math->add(1, 2);
$math->add(1, 2, 3);
// 1,2总和是: 3
// 1,2,3总和是: 6
当整个专案愈来愈大时, 可能会遇到同类名, 同名函数, 同名常数, 从 PHP 5.3 开始提供命名空间让我们可以将他们分别放到不同的命名空间中, 使用 namespace 关键字来声明命名空间, 命名空间只能存放类, 函数, 常数, 第一个 namespace 前面不能有任何代码, 引入档案不影响当前的命名空间
<?php
namespace SolarSystem;
function getInfo()
{
echo "我在太阳系\n";
}
namespace Earth;
function getInfo()
{
echo "我在地球\n";
}
getInfo();
\SolarSystem\getInfo();
\Earth\getInfo();
// 结果
// 我在地球
// 我在太阳系
// 我在地球
trait 是 PHP 5.4 开始提供的特性, 减少单继承语言的限制, 可以在不同层次结构内独立出覆用的代码, 多个 trait 可以组成一个 trait, trait 可以定义抽象成员, 可以定义静态成员
<?php
trait A
{
public function readPoem()
{
echo "会读唐诗三白首\n";
}
}
class Student
{
use A; // 代码覆用
}
class Coder
{
use A;
}
$student1 = new Student;
$student1->readPoem();
<<: 连续 30 天 玩玩看 ProtoPie - Day 3
>>: Day04 - Amazon ECS Anywhere 基础说明与建置(下)
在开始今天的主题前,虽然在前面介绍 Slate 时已经有稍微提到过了,我们还是先从 slate 的...
今天的内容为介绍利用selenium来操控浏览器 像是点选,滑动页面,甚至是填写及送出表单,拢系ok...
Day 13 - 半自动标签图片的方法与实作 以下介绍一个自制的简易的半自动标签图片的作法,主要是因...
利用 Angualr 框架开发单一应用程序 (Single-Page Application, SP...
有意义的讨论 层层拆解,找到歧异点 讨论过程里面,我们通常容易跳到结论做为起点,而我们通常也会先看到...