khalyomede/fetch

快速检索您的PHP数据

v1.6.0 2018-03-07 23:28 UTC

This package is auto-updated.

Last update: 2024-09-29 04:03:31 UTC


README

PHP from Packagist Packagist Packagist

快速检索您的PHP数据。

/config
  /database
    database.php
    option.php
  app.php

$fetch = new Fetch('config');

$command = $fetch->from('database.option.initial-command');

摘要

先决条件

  • PHP 版本 >= 7.0.0

安装

在您的项目文件夹中

composer require khalyomede/fetch:1.*

使用示例

以下所有示例都假设我们在根目录(在 index.php 文件内部)并且具有以下结构

/config
  /database
    database.php
    option.php
  app.php
index.php

示例 1:从简单文件中检索数据

所有配置文件都应该返回一个PHP数组。

假设文件 app.php 包含以下内容

return [
  'name' => 'My app',
  'charset' => 'utf-8'
];

我们可以使用以下方式检索字符集

use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$charset = $fetch->from('app.charset');

print_r($charset);

这将显示

utf-8

示例 2:通过遍历多个文件夹检索数据

所有配置文件都应该返回一个PHP数组。

假设文件 option.php 包含以下内容

return [
  'initial-command' => "SET names 'utf-8'"
];
use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$initial_command = $fetch->from('database.option.initial-command');

print_r($initial_command);

将显示

SET names 'utf-8'

示例 3:在嵌套键中检索数据

所有配置文件都应该返回PHP数组。

假设文件 option.php 包含以下内容

return [
  'cache' => [
    'strategy' => 'cache-first'
  ]
];
use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$strategy = $fetch->from('database.option.cache.strategy');

print_r($stategy);

将显示

cache-first

示例 4:使用特定键检索一些数据

所有配置文件都应该返回PHP数组。

假设文件 option.php 包含以下内容

return [
  'cache' => [
    'strategy' => 'cache-first'
  ],
  'timeout' => 12.5
];
use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$data = $fetch->from('database.option');

print_r($data);

将显示

Array
(
  [cache] => Array
    (
      [strategy] => cache-first
    )
  [timeout] => 12.5
)

示例 5:使用缓存加快检索速度

假设已创建一个新的文件夹,名为 cache。以下是更新后的结构

/config
  /database
    option.php
  app.php
/cache
index.php
use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$fetch->usingCache( __DIR__ . '/cache' );

$charset = $fetch->from('app.charset');

第一次检索可能较慢,但后续的检索将更快,前提是缓存数据没有被移除。

注意

此库不会处理缓存清理。

技巧

考虑在开发模式下禁用缓存,因为您的配置文件会频繁更改,并且可能不会更新为新值而变得过时。此技巧具有Laravel 5调试助手的功能。

use Khalyomede\Fetch;

// ...

$fetch = new Fetch( base_path() . '/config' );

if( config('app.debug') !== true ) {
  $fetch->usingCache( base_path() . '/' )
}

$language = $fetch->from('app.locale');

警告

如果您在更新配置数据后未清除缓存而使用缓存,则缓存可能已过时。

示例 6:在真正检索数据之前使用一个函数

如果需要,您可以在获取/缓存数据之前应用“中间件”函数。

use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$remove_dashes = function ($data) {
  return str_replace('-', '', $data);
};

$charset = $fetch->across($remove_dashes)->from('app.charset');

print_r($charset);

将显示

utf8

注意

提示

use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$now = (new DateTime())->format('Y-m-d');

$charset = $fetch->across(function($data) use($now) {
  return "$data ($now)";
})->from('app.charset');

print_r($charset);

将显示

utf-8 (2018-03-03)

匿名函数仅接受一个参数,这可能会令人沮丧。使用 use 语句来帮助您传递更多参数并克服此限制

注意 2

use Khalyomede\Fetch;

$fetch = new Fetch( __DIR__ . '/config' );

$fetch->across(function($data) {
  return str_replace('-', '', $data);
});

$charset = $fetch->from('app.charset'); 

print_r($charset);

$fetch->uncross(); // or $fetch->uncross()->from('...');

$timeout = $fetch->from('database.option.timeout');

print_r($timeout);

将显示

utf8
12.5

原型准备就绪

函数设置后,它将应用于任何进一步的检索。如果您想删除函数,可以使用 uncross() 来实现

$fetch->prototype('exists', function($path) {
  $exists = false;

  try {
    $this->from($path);

    $exists = true;
  }
  catch(Exception $e) {}

  return $exists;
});

if($fetch->exists('test')) {
  echo $fetch->from('test');
}
else {
  echo 'this configuration does not exists';
}

有关更多信息,请参阅 khalyomede/prototype 文档。

方法定义

construct()

设置默认文件夹以从其中检索数据。

public function __construct(string $folder_path): Fetch

异常

InvalidArgumentException:

  • 如果文件夹路径不存在
  • 如果文件夹路径不是文件夹

from()

从给定路径获取数据。

public function from(string $path): mixed

异常

InvalidArgumentException:

  • 如果路径为空
  • 如果某个键为空(例如: "database.option.")
  • 如果目标配置文件不返回数组
  • 如果路径针对一个不存在的键

UnexpectedValueException:

  • 如果在启用缓存模式时未指定缓存文件夹

RuntimeException:

  • 如果目标配置文件在读取模式下不可用
  • 如果缓存数据文件在读取模式下不可用

usingCache()

指定存储缓存数据的文件夹并启用缓存模式。

public function usingCache(string $cache_folder_path): Fetch

异常

InvalidArgumentException:

  • 如果文件夹不存在
  • 如果路径不是文件夹

enableCache()

启用缓存模式。

public function enableCache(): Fetch

disableCache()

禁用缓存模式。

public function disableCache(): Fetch

encrypt()

当需要从路径获取相同文件名以执行附加处理时很有用。

public function encrypt(string $string): string

decrypt()

当您想使用缓存的文件名获取存储缓存文件的原始路径时很有用。

public function decrypt(string $string): string

注意

使用文件名解密时,不要包含文件扩展名(.php)。

across()

在获取或缓存数据之前应用一个函数(应该是匿名函数,即闭包)。该函数应只有一个参数,该参数将被填充为获取到的数据。

public function across(callable $function): Fetch

异常

InvalidArgumentException:

  • 如果函数不是匿名函数(即闭包)
  • 如果函数参数不是正好一个
  • 如果函数没有正好一个必需的参数

ReflectionException:

uncross()

移除之前设置的函数(由 Fetch::across 创建)。

public function uncross(): Fetch

MIT 许可证

Fetch

版权所有 © 2018 Khalyomede

在此特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人,在不受限制的情况下处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人这样做,前提是符合以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任基于合同、侵权或其他法律依据,源于、源于或与软件或其使用或任何其他方式有关。