serafim / stream
PHP流式库
dev-master / 1.0.x-dev
2021-05-27 02:43 UTC
Requires
- php: >=7.4
- psr/simple-cache: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: >=4.4
This package is auto-updated.
Last update: 2024-08-27 09:55:55 UTC
README
流式包源代码
安装
composer require serafim/stream
简介
Stream包提供实时覆盖文件内数据的能力。
协议流
<?php use Serafim\Stream\Stream; Stream::create('some') ->tryRead(function (string $pathname): string { return $pathname; }); echo \file_get_contents('some://example'); // string(7) "example"
<?php use Serafim\Stream\Stream; Stream::create('four') ->onRead(function (string $sources): string { return $sources . "\n" . 'return 4;'; }); echo require 'four://example.php'; // int(1) "4"
Composer
<?php use Serafim\Stream\ClassLoader; $composer = require __DIR__ . '/vendor/autoload.php'; $loader = new ClassLoader($composer); $loader->when // The stream will be triggered only on those files // whose namespace starts with "App" ->namespace('App') ->then(function (string $sources): string { \var_dump(42); return $sources; }); // When loading this class, var_dump(42) will be displayed. new App\Example();
Composer过滤器
每个过滤器从调用$loader->when
方法开始。
过滤器where
当传递给where
方法的无名函数的结果返回true
时,它才会工作。
$loader->when->where(function (string $class, string $pathname): bool { return $class === 'User'; }); $user = new User();
过滤器not
当传递给not
方法的无名函数的结果返回false
时,它才会工作。
$loader->when->not(function (string $class, string $pathname): bool { return $class !== 'User'; }); $user = new User();
过滤器every
当在匿名函数内部应用每个规则时,如果每个规则都返回正值,则工作。
use Serafim\Stream\Filter\Conjunction; $loader->when->every(function (Conjunction $fn) { $fn->where(...); // AND $fn->where(...); });
过滤器any
当在匿名函数内部应用任何规则(一个或多个)时,如果任何规则返回正值,则工作。
use Serafim\Stream\Filter\Disjunction; $loader->when->any(function (Disjunction $fn) { $fn->where(...); // OR $fn->where(...); });
过滤器fqn
当fqn(完全限定名)与指定的相匹配时,它才会工作。
$loader->when->fqn('App\\User'); new App\User(); // Stream works new Some\App\User(); // Stream does not work
过滤器className
当类名与指定的相匹配时,它才会工作。
$loader->when->className('User'); new App\User(); // OK new Any\User(); // OK
过滤器namespace
当命名空间与指定的相匹配时,它才会工作。
$loader->when->className('App'); new App\User(); // OK new App\Message(); // OK
过滤器fileName
当文件名与指定的相匹配时,它才会工作。
$loader->when->fileName('App'); new App(); // The stream is triggered if the file name matches the class name.
过滤器pathNameMatches
如果路径匹配正则表达式,则触发流。
$loader->when->pathNameMatches('Models/.*');
过滤器fileNameMatches
如果文件名匹配正则表达式,则触发流。
$loader->when->fileNameMatches('\w+Interface');
过滤器classNameMatches
如果类名匹配正则表达式,则触发流。
$loader->when->classNameMatches('\w+Interface');
过滤器fqnMatches
如果fqn(完全限定名)匹配正则表达式,则触发流。
$loader->when->fqnMatches('App\\.*?\\\w+Interface');
过滤器withVendors
如果文件是从供应商目录加载的(默认情况下,忽略所有供应商文件),则触发流。
$loader->when->withVendors();