headzoo/core

该包已被弃用且不再维护。未建议替代包。

PHP 工具类和函数的集合。

0.6.3.2 2014-06-25 01:13 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:33:24 UTC


README

PHP 工具类和函数的集合。

概述

该项目是我多年来创建的类、方法和函数的集合,我在大多数其他项目中都使用了它们。项目的目的是将我所有有用的代码放在一个地方。当我在其他项目中找到认为应该加入核心的有用类时,我会继续添加到这个框架中。

要求

安装

可以使用 git 或 composer 安装库。

Git

使用以下命令简单地克隆项目。

git clone git@github.com:headzoo/core.git
Composer

将项目添加到您的 composer.json 中作为依赖项。

"require": {
    "headzoo/core" : "dev-master"
}

类概述

完整的类 API 文档可在 /docs 目录和 wiki 中找到。

Core\Arrays

包含用于操作数组的静态方法。

Core\Strings

包含用于操作字符串的静态方法。

Core\Objects

包含用于操作对象和类的静态方法。

Core\ErrorHandler

用于捕获和优雅地处理核心错误和异常。

Core\Errors

用于处理 E_ERROR 常量的实用类。

Core\Profiler

用于分析代码。

Core\Conversions

用于从一个值转换为另一个值的实用类。

Core\ConstantsTrait

用于反射类常量的 trait。

Core\AbstractEnum

创建枚举类的抽象类。

Core\SmartCallable

当资源不再需要时调用函数。

Core\ConfigurableCallable

创建具有可配置行为的可调用实例。

Core\FunctionsTrait

包含处理函数和方法的函数。

Core\Comparator

包含用于在值之间进行比较的静态方法。

快速入门

此快速入门指南简要介绍了几个类。完整的类API文档可在/docs目录中找到。

Core\Strings

echo Strings::camelCaseToUnderscore("CamelCaseString");
// Outputs: "camel_case_string"

echo Strings::camelCaseToUnderscore("MaryHadALittleLamb");
// Outputs: "mary_had_a_little_lamb"


$is = Strings::startsUpper("Welcome my son, welcome to the machine.");
var_dump($is);

// Output: bool(true);

$is = Strings::startsUpper("you've been in the pipeline, filling in time");
var_dump($is);

// Output: bool(false)


// Truncating a string at the end.
echo Strings::truncate("Mary had a little lamb, whose fleece was white as snow.", 20, Strings::TRUNC_END);

// Outputs: "Mary had a little..."

// Truncating a string at the start.
echo Strings::truncate("Mary had a little lamb, whose fleece was white as snow.", 20, Strings::TRUNC_START);

// Outputs: "...as white as snow."

// Truncating a string in the middle.
echo Strings::truncate("Mary had a little lamb, whose fleece was white as snow.", 20, Strings::TRUNC_MIDDLE);

// Outputs: "Mary ha...e as snow."

Core\Arrays

$array = [
   "headzoo",
   "joe",
   "sam"
];

echo Arrays::conjunct($array);
// Outputs: headzoo, joe, and sam

// Using a callback to quote the array values.
echo Arrays::conjunct($array, "and", 'Headzoo\Core\Strings::quote');
// Outputs: 'headzoo', 'joe', and 'sam'


$arr = [
 0 => [
     "username" => "headzoo",
     "email" => "sean@headzoo.io"
 ],
 1 => [
     "username" => "joe",
     "email" => "joe@headzoo.io"
 ]
]

$ret = Arrays::column($arr, "username");

// Outputs: ["headzoo", "joe"]

Core\Objects

// Testing whether an object is an instance of another.
$is = Objects::isInstance(new stdClass(), stdClass);
var_dump($is);
// Outputs: bool(true)

// Unlike the instanceof operator, the second argument can be a string.
$is = Objects::isInstance(new stdClass(), 'stdClass');
var_dump($is);
// Outputs: bool(true);

// You can even test an array of objects.
$objects = [
    new stdClass(),
    new stdClass()
];
$is = Objects::isInstance($objects, stdClass);
var_dump($is);
// Outputs: bool(true)

Core\ErrorHandler

// Capture all errors, and display an error page instead of the usual php
// error message.
$handler = new ErrorHandler();
$handler->handle();

// Setup your own way of handing errors.
$handler = new ErrorHandler();
$handler->setCallback(function($handler) {
	include("template/error.php");
});
$handler->handle()

// Even handle errors different in different environments.
$handler = new ErrorHandler();
$handler->setCallback("dev", function($handler) {
	include("template/error_dev.php");
});
$handler->setCallback("live", function($handler) {
	include("template/error_live.php");
});
$handler->handle("live");

Core\Profiler

// The most basic profiling.
$profiler = new Profiler();
$profiler->start();
... do something here ...
$micro = $profiler->stop();
var_dump($micro);

// Outputs:
// "Profile time for 'default': 0.00030207633972168"
// double(0.00030207633972168)


// This example runs the closure 100 times, and displays the profile results.
Profiler::run(100, true, function() {
  ... do something here ...
});

// Output:
//
// Total Runs:                 100
// Total Time:      0.099596977234
// Average Time:    0.000981624126
// -------------------------------
// Run #1           0.000479936599
// Run #2           0.000968933105
// Run #3           0.000982999801
// Run #4           0.000988006591
// ......
// Run #97          0.000985145568
// Run #98          0.000983953476
// Run #99          0.000997066497
// Run #100         0.000993013382

Core\AbstractEnum

class DaysEnum
   extends AbstractEnum
{
   const SUNDAY    = "SUNDAY";
   const MONDAY    = "MONDAY";
   const TUESDAY   = "TUESDAY";
   const WEDNESDAY = "WEDNESDAY";
   const THURSDAY  = "THURSDAY";
   const FRIDAY    = "FRIDAY";
   const SATURDAY  = "SATURDAY";
   const __DEFAULT = self::SUNDAY;
}

$day = new DaysEnum("SUNDAY");
echo $day;
echo $day->value();

// Outputs:
// "SUNDAY"
// "SUNDAY"


// The default value is used when not specified.
$day = new DaysEnum();
echo $day;

// Outputs: "SUNDAY"


// The constructor value is not case-sensitive.
$day = new DaysEnum("sUndAy");
echo $day;

// Outputs: "SUNDAY"

// Enum values are easy to compare.
$day_tue1 = new DaysEnum(DaysEnum::TUESDAY);
$day_fri1 = new DaysEnum(DaysEnum::FRIDAY);
$day_tue2 = new DaysEnum(DaysEnum::TUESDAY);
$day_fri2 = new DaysEnum($day_fri1);

var_dump($day_tue1 == DaysEnum::TUESDAY);
var_dump($day_tue1 == $day_tue2);
var_dump($day_fri1 == $day_fri2);
var_dump($day_tue1 == DaysEnum::FRIDAY);
var_dump($day_tue1 == $day_fri1);

// Outputs:
// bool(true)
// bool(true)
// bool(true)
// bool(false)
// bool(false)

Core\SmartCallable

// In this example we create a method which requests a web resource using curl.
// We use a SmartCallable instance to ensure the curl resource is closed when
// the method returns, or an exception is thrown.

public function fetch()
{
  $curl = curl_init("http://some-site.com");
  $sc = SmartCallable::factory(function() use($curl) {
          curl_close($curl);
  });

  $response = curl_exec($curl);
  if ($e = curl_error()) {
      throw new Exception($e);
  }

  return $response;
}

// The method could also be written this way.
public function fetch()
{
  $curl = curl_init("http://some-site.com");
  $sc = SmartCallable::factory("curl_close", $curl);

  $response = curl_exec($curl);
  if ($e = curl_error()) {
      throw new Exception($e);
  }

  return $response;
}

Core\ConfigurableCallable

// In this example you want to insert a row into the database, which may lead to
// a DeadLockException being thrown. The recommended action for dead locks is retrying
// the query. We use a ConfigurableCallable instance to keep trying the query until
// it succeeds.
$link  = mysqli_connect("localhost", "my_user", "my_password", "my_db");
$query = new ConfigurableCallable("mysqli_query");
$query->retryOnException(DeadLockException::class);
$result = $query($link, "INSERT INTO `members` ('headzoo')");

// In this example we will call a remote web API, which sometimes takes a few tries
// depending on how busy the remote server is at the any given moment. The remote
// server may return an empty value (null), the API library may thrown an exception,
// or PHP may trigger an error.
$api     = new RemoteApi();
$members = new ConfigurableCallable([$api, "getMembers"]);
$members->retryOnException()
     ->retryOnError()
     ->retryOnNull();
$rows = $members(0, 10);

Core\Conversions

echo Conversions::bytesToHuman(100);
// Outputs: "100B"

echo Conversions::bytesToHuman(1024);
// Outputs: "1KB"

echo Conversions::bytesToHuman(1050);
// Outputs: "1.02KB"

变更日志

v0.6.3.2 - 2014/06/24
  • 修改了对非对象的Objects::isInstance处理。
v0.6.3.1 - 2014/05/28
  • 创建了FunctionsTrait::throwOnInvalidArgument
v0.6.2 - 2014/05/19
  • Arrays类中的错误修复。
v0.6.1 - 2014/05/13
  • 对Psr\Log进行了小的修复。
v0.6.0 - 2014/04/01
  • 现在Functions类是一个特性,FunctionsTrait
  • 将类Complete重命名为SmartCallable
  • 创建了ConfigurableCallable类。
  • 创建了Comparator类。
v0.5.0 - 2014/03/31
  • 创建了Conversions类。
  • Profiler::run方法输出内存使用情况。
  • 重构了ErrorHandler类。
v0.4.1 - 2014/03/30
  • 创建了Functions::swapArgs方法。
  • 重构了ErrorsHandler类中的一些代码。
v0.4.0 - 2014/03/30
  • 创建了ErrorsHandler类。
  • 创建了Errors类。
  • 创建了Arrays::remove方法。
v0.3.2 - 2014/03/29
  • 创建了Strings::truncate方法。
  • 移除了Strings::split方法。
  • 创建了Profiler类。
  • psr/Log设为必需。
v0.3.1 - 2014/03/27
  • Validator类合并到Functions类中。
v0.3 - 2014/03/26
  • 将命名空间Headzoo\Utilities重命名为Headzoo\Core
  • 将项目重命名为headzoo/core
  • 创建了核心类Obj
  • 添加了特性ConstantsTrait
  • 创建了特性ConstantsTrait
  • 创建了AbstractEnum类。
  • Strings类现在能够无缝地处理多字节字符串。
  • Strings::transformCamelCaseToUnderscore重命名为Strings::camelCaseToUnderscore
  • Strings::transformUnderscoreToCamelCase重命名为Strings::underscoreToCamelCase
  • Strings类中添加了新方法
    • Strings::startsWith.
    • Strings::endsWith.
    • Strings::startsUpper.
    • Strings::startsLower.
    • Strings::replace.
    • Strings::length.
    • Strings::chars.
    • Strings::toUpper.
    • Strings::toLower.
    • Strings::ucFirst.
    • Strings::lcFirst.
    • Strings::title.
    • Strings::sub.
    • Strings::split.
    • Strings::transform.
v0.2.3 - 2014/03/25
  • 将最小PHP版本要求提高至5.5.0。ClassName::class永存!
  • 添加了Strings::quote方法。
  • 添加了Arrays::conjunct方法。
  • 添加了Functions::swapCallable方法。
  • 添加了Validator类。
v0.2.2 - 2014/03/24
  • 添加了Arrays::findString方法。
v0.2.1 - 2014/03/24
  • Complete::invoke的可见性更改为public。
v0.2 - 2014/03/24
  • 添加了Complete类。
v0.1 - 2014/03/23
  • 第一个版本在MIT许可证下发布。

TODO

  • Strings常量替换为枚举。

许可证

本内容根据MIT许可证发布。有关更多信息,请参阅包含的LICENSE文件。