Skip to content
封闭机制,保护对象信息安全。
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
LICENSE
README.md
composer.json

README.md

autism

介绍

封闭机制,保护对象信息安全。主要分为两点:

  1. 通过构造函数、克隆函数私有,避免外部创建、复制对象
  2. 对象属性、函数不公开,通过委托对象验证授权外部访问、操作

要求 PHP 版本 >=7.1.0。

注意:使用该封闭机制,可能会遇见不可调和的程序矛盾,切勿轻易尝试。

安装教程

建议使用 composer 命令安装:

composer require 7csn/autism:~2.0

使用说明

一. 对象创建

封闭对象构造方法不可重写,创建对象通过静态方法 instance(常规类) 和 singleton(单例类)。
并提供 configurable 属性列出可构造的的属性,以及 constructing、constructed 无参函数作为可构造属性初始化前、后事件。

use chaser\autism\Instance;
use chaser\autism\Singleton;
  
// 引入 composer 自加载文件(路径视具体情况而定)
require __DIR__ . '/vendor/autoload.php';
  
// 常规类
class InstanceTest extends Instance
{
    // 属性
    protected $prop = '默认属性值';
  
    // 可构造属性:prop
    protected $configurable = ['prop'];
  
    // 实例化前事件
    protected function constructing()
    {
        echo '实例化前 ' . $this->prop;
    }
}

// 单例类
class SingletonTest extends Singleton
{
    // 属性
    protected $prop = '默认属性值';
  
    // 可构造属性:prop
    protected $configurable = ['prop'];
  
    // 实例化后事件
    protected function constructed()
    {
        echo '实例化后 ' . $this->prop;
    }
}
  
// 创建对象,无参或为 [可构造属性名1 => 属性值1, ...]
$instance = InstanceTest::instance(['prop' => '初始化属性值']);   // 输出:实例化前 默认属性值
$singleton = SingletonTest::singleton(['prop' => '初始化属性值']);    // 输出:实例化后 初始化属性值

二. 委托对象 delegate,对象构造后自发创建,以常规类为例

读取、修改 public 修饰的属性;执行 public 修饰的函数:

class Test extends \chaser\autism\Instance
{
    // 公开对象属性
    public $prop = '公开对象属性默认值';
  
    // 公开对象方法
    public function func()
    {
        echo 'do something';
    }
 
    // 提供委托对象
    public function getDelegate()
    {
        return $this->delegate;
    }
}
 
// 创建对象
$test = Test::instance();
 
// 委托对象
$delegate = $test->getDelegate();
 
echo $delegate->prop;   // 输出:公开对象属性默认值
 
$delegate->prop = '修改公开对象属性值';
 
echo $delegate->prop;   // 输出:修改公开对象属性值
 
$delegate->func();  // 输出:do something

获取可读对象属性,由 delegate、readable 属性实现:

class Orphan extends \chaser\autism\Instance
{
    protected $configurable = ['name'];
  
    // 可读对象属性列表
    protected $readable = ['name'];
  
    // 姓名
    protected $name;
  
    public function getGuardian()
    {
        return $this->delegate;
    }
}

// 孤儿
$orphan = Orphan::instance(['name' => '小红']);
  
// 监护人
$delegate = $orphan->getGuardian();
  
// 获取孤儿姓名
echo $delegate->name;   // 输出:小红

修改可写对象属性,由 delegate、writable 属性实现:

class Orphan extends \chaser\autism\Instance
{
    protected $readable = ['name'];
  
    // 可写对象属性列表
    protected $writable = ['name'];
  
    // 姓名
    protected $name;
  
    public function getGuardian()
    {
        return $this->delegate;
    }
}
  
// 孤儿
$orphan = Orphan::instance();
  
// 监护人
$delegate = $orphan->getGuardian();
  
// 给孤儿取名李雷
$delegate->name = '李雷';
  
echo $delegate->name; // 输出:李雷

执行可操作对象函数,由 delegate、executable 属性实现:

class Student extends \chaser\autism\Instance
{
    // 可操作对象函数列表
    protected $executable = ['homework'];
  
    // 布置作业
    protected function homework($lesson)
    {
        echo "课程{$lesson}的作业";
    }
  
    public function teacher()
    {
        return $this->delegate;
    }
}
  
// 学生
$student = Student::instance();
  
// 老师
$teacher = $student->teacher();
  
// 布置作业
$teacher->homework(1);  // 输出:课程1的作业

此外,提供 staticReadable、staticWritable、staticExecutable 属性,分别对应 readable、writable、executable 属性,作为静态可读属性、静态可写属性、静态可操作函数的配置。

You can’t perform that action at this time.