示例:php将文本内容写入一个文件(面向对象写法)

1、JsonContentHandler

class JsonContentHandler extends ContentHandler
{
    public function write(): bool
    {
        $json = json_encode($this->contents, JSON_UNESCAPED_UNICODE);
        if (file_put_contents($this->source, $json) !== false) {
            return true;
        } else {
            return false;
        }
    }

    public function read(): bool
    {
        $json = file_get_contents($this->source);
        if (!$json) {
            return false;
        }
        $this->contents = json_decode($json, true);
        return true;
    }
}

2、XmlContentHandler

class XmlContentHandler extends ContentHandler
{
    public function write(): bool
    {
        // TODO: 实现写入xml函数.
    }

    public function read(): bool
    {
        // TODO: 实现读取xml函数
    }
}

3、ContentHandler

abstract class ContentHandler
{
    protected $source;
    protected $contents = [];

    public function __construct($source)
    {
        $this->source = $source;
    }

    public function addContent(string $key, string $val)
    {
        $this->contents[$key] = $val;
    }

    public function getAllContents(): array
    {
        return $this->contents;
    }


    public static function getInstance(string $filename): ContentHandler
    {
        if (preg_match("/\.xml$/i", $filename)) {
            return new XmlContentHandler($filename);
        } elseif (preg_match("/\.json$/i", $filename)) {
            return new JsonContentHandler($filename);
        } else {
            throw new Exception("暂不支持该文件类型");
        }
    }

    abstract public function write(): bool;

    abstract public function read(): bool;
}

4、客户端调用

 //功能1读写
$test = ContentHandler::getInstance(__DIR__ . "/test.json");
$test->addContent("name", "张三");
$test->addContent("sex", "男");
$test->addContent("age", 20);
$result = $test->write();
if (!$result) {
    echo '数据写入文件失败!';
    exit;
}
$contents = $test->getAllContents();
var_export($contents);
exit;
/** 输出
 * array (
 * 'name' => '张三',
 * 'sex' => '男',
 * 'age' => '20',
 * )
 */


//功能二:只读
$test = ContentHandler::getInstance(__DIR__ . "/test.json");
$test->read();
$contents = $test->getAllContents();
var_export($contents);exit;
/** 输出
 * array (
 * 'name' => '张三',
 * 'sex' => '男',
 * 'age' => '20',
 * )
 */

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

try_bool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值