PHP 一些概念

汇入

  • require: 可汇入多次, 如果出现错误, 会出现提醒, 并停止代码运行
  • include: 可汇入多次, 如果出现错误, 会出现提醒, 并继续运行下面代码
  • require_once: 与 require 唯一的差别在於 require_once 会先检查要汇入的档案是不是已经在该程序中的其它地方被汇入过了,如果有的话就不会再次重复汇入该档案
  • include_once: 与 include 唯一的差别在於 include_once 会先检查要汇入的档案是不是已经在该程序中的其它地方被汇入过了,如果有的话就不会再次重复汇入该档案

模拟方法重载

重载是一种很多程序语言的特性, 只允许存在同一名称但不同签章的方法, 签章指的是参数的类型与个数, 但 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

命名空间(namespace)

当整个专案愈来愈大时, 可能会遇到同类名, 同名函数, 同名常数, 从 PHP 5.3 开始提供命名空间让我们可以将他们分别放到不同的命名空间中, 使用 namespace 关键字来声明命名空间, 命名空间只能存放类, 函数, 常数, 第一个 namespace 前面不能有任何代码, 引入档案不影响当前的命名空间

<?php
namespace SolarSystem;
function getInfo()
{
  echo "我在太阳系\n";
}

namespace Earth;
function getInfo()
{
  echo "我在地球\n";
}

getInfo();
\SolarSystem\getInfo();
\Earth\getInfo();

// 结果
// 我在地球
// 我在太阳系
// 我在地球

Trait(特性)

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 基础说明与建置(下)

Day 10. slate × 架构蓝图

在开始今天的主题前,虽然在前面介绍 Slate 时已经有稍微提到过了,我们还是先从 slate 的...

Day 24 Selenium模组三

今天的内容为介绍利用selenium来操控浏览器 像是点选,滑动页面,甚至是填写及送出表单,拢系ok...

Day 13 - 半自动标签图片的方法与实作

Day 13 - 半自动标签图片的方法与实作 以下介绍一个自制的简易的半自动标签图片的作法,主要是因...

第 26 型 - 路由 (Router)

利用 Angualr 框架开发单一应用程序 (Single-Page Application, SP...

[Day14] 团队管理:建立团队信赖感(3)

有意义的讨论 层层拆解,找到歧异点 讨论过程里面,我们通常容易跳到结论做为起点,而我们通常也会先看到...