ivir3zam/object-array-tools

适用于在PHP库中使用的功能齐全的数组行为抽象类

1.1.2 2017-01-03 06:37 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:31:27 UTC


README

Build Status Code Climate Issue Count Test Coverage

这个库可以帮助您将对象作为一个具有更新、插入、删除、清理和过滤元素钩子的活动数组使用。

技术细节

这个库与PHP内置的ArrayObject类不同,这种差异在于这个库基于特性,因此您可以在已经扩展了其他类的类中使用它,其他差异是关于钩子,这些钩子帮助您为ObjectArray实现观察者模式,并且您还有许多与PHP原生数组函数等效的方法

安装

安装ObjectArrayTools的推荐方式是通过 Composer

# Install Composer
curl -sS https://getcomposer.org/installer | php

接下来,运行Composer命令安装Guzzle的最新稳定版本

php composer.phar require ivir3zam/object-array-tools

安装后,您需要包含Composer的自动加载器

require 'vendor/autoload.php';

然后您可以使用composer更新ObjectArrayTools

composer.phar update

示例

这个库可以帮助您将对象用作存储,并且不会影响您当前对象的功能

基本数组使用

此示例仅展示此库的基本用法

use IVIR3aM\ObjectArrayTools\AbstractActiveArray;

class ActiveArray extends AbstractActiveArray {}

$object = new ActiveArray(['Hello', 'World']);

echo 'Number of elements: ' . count($object) . "\n";

foreach ($object as $string) {
    echo $string  . ' ';
}

echo "\n";

$object[1] = 'Visitor';

foreach ($object as $string) {
    echo $string  . ' ';
}

echo "\n";

/*
OUTPUT:

Number of elements: 2
Hello World
Hello Visitor

/*

将输入保存到数据库并在浏览器中显示输出

在此示例中,我们尝试创建一个数组,当您向其中写入数据时,对数据库进行过滤,当您从中读取数据时,对HTML输出进行清理

use IVIR3aM\ObjectArrayTools\AbstractActiveArray;

class DatabaseRecord extends AbstractActiveArray
{
    protected function sanitizeInputHook($offset, $data)
    {
        // some strong operation of sanitizing $data needed, this is only a sample
        return mysqli_real_escape_string($link, $data);
    }

    protected function sanitizeOutputHook($offset, $data)
    {
        return htmlspecialchars($data);
    }

    protected function updateHook($offset, $data, $oldData)
    {
        // some strong operation of updating database process needed, this is only a sample
        mysqli_query($link, "UPDATE SomeTable SET `Data` = '{$data}' WHERE `ID` = " . intval($offset));
    }

    protected function removeHook($offset, $oldData)
    {
        // some strong operation of updating database process needed, this is only a sample
        mysqli_query($link, "DELETE FROM SomeTable WHERE `ID` = " . intval($offset));
    }

    protected function insertHook($offset, $data)
    {
        mysqli_query($link, "INSERT INTO SomeTable SET `ID` = " . intval($offset) . ", `Data` = '{$data}'");
    }
}

$db = new DatabaseRecord();
$db[1] = "Lorem Ipsum <some>script</some>'; DELETE FROM SomeTable";
// mysqli_query($link, "INSERT INTO SomeTable SET `ID` = 1, `Data` = 'Lorem Ipsum <some>script</some>\'; DELETE FROM SomeTable'");

echo $db[1];
// Lorem Ipsum &lt;some&gt;script&lt;/some&gt;'; DELETE FROM SomeTable

排序数组

您可以在本库中看到排序功能。在AbstractActiveArray类的文档中可以找到支持的函数的完整列表

use IVIR3aM\ObjectArrayTools\AbstractActiveArray;

class ActiveArray extends AbstractActiveArray {}

$object = new ActiveArray(['How', 'Are', 'You']);

print_r($object->getData());
/*
Array
(
    [0] => How
    [1] => Are
    [2] => You
)
*/

$object->sort();

print_r($object->getData());
/*
Array
(
    [0] => Are
    [1] => How
    [2] => You
)
*/