我正在将我的项目从 PHP 7.0 更新到 PHP 8.0,但我无法确定是否允许显式分配resource为数据类型:
我现在所知道的是:
直到现在我读到:
我在某个地方错过了什么吗?
感谢您的时间。
为了更清楚起见,这就是我想要resource在项目中使用数据类型的方式(PSR-7 实现):
<?php
namespace MyPackages\Http\Message;
use Psr\Http\Message\StreamInterface;
/**
* Stream.
*/
class Stream implements StreamInterface {
/**
* A stream, e.g. …Run Code Online (Sandbox Code Playgroud) 在Web MVC项目中,我有以下结构:
mymvc/ -> Project root.
public/ -> Document root. The only one folder accessible from web.
assets -> Client-side assets. NOT ONLY for global themes and libraries, BUT ALSO for each specific "view" controlled by the "src/Application" components.
css/
js/
images/
...
index.php -> Application's entry point.
src/ -> UI layer rules.
Application/
Controller/
View/
ViewModel/
Dispatcher/ -> Application dispatching - route matching, dispatching to the specified controller, etc.
... -> Other classes used by the components in the …Run Code Online (Sandbox Code Playgroud) php architecture model-view-controller web-applications directory-structure
我知道我可以使用fopen函数从文件名(真实的或URL)创建PHP流:
$stream = fopen('php://temp', 'r');
Run Code Online (Sandbox Code Playgroud)
然后,生成的stream($stream)是从URL创建的"stream"类型的资源.php://temp
但是我如何从资源中创建如上所述的流?
我为什么这么问?
我正在研究PSR-7库,我用类实现了PSR-7 StreamInterfaceStream.为了创建Stream实例,我决定也实现了StreamFactory.其接口StreamFactoryInterface在PSR-17(HTTP工厂)提案中定义.
在StreamFactoryInterface定义了一个名为方法createStreamFromResource,其中-符合其官方评论-应该:
从现有资源创建新流.
流必须是可读的并且可以是可写的.
因此工厂方法接收资源作为参数.并且,在其具体实现中,Stream创建了一个新对象 - 它也接收资源作为参数.
这是问题所在:
为简单起见,假设Stream该类仅适用于流,例如使用"stream"类型的资源.如果它收到的资源不属于"stream"类型,则会拒绝它.
那么,如果资源参数createStreamFromResource不是"流"类型的资源呢?如何将其转换为流,例如转换为"stream"类型的资源,以便我可以将其进一步传递给Stream使用它创建新对象的调用?是否有实现此任务的方法(PHP方法,函数或可能的转换函数)?
笔记:
testStream.php),我Stream用三种方式创建一个流,例如一个实例:一次直接,两次使用流工厂.StreamFactory带有方法的类createStreamFromResource.调用此方法应该是我创建流的第四种方法testStream.php.Stream和Response,这样就可以直接测试所有,如果你想.这两个类是我的真实代码的一个非常简化的版本. …我正在逐步将我的项目从PHP 7.1迁移到PHP 8.0。
在PHP官方手册中,在“从PHP 7.3.x迁移到PHP 7.4.x”一章的“弃用功能”子章节中,我尝试理解以下弃用描述:
解除绑定
$this时$this使用解除绑定
$this使用的非静态闭包$this解除绑定。
虽然,没有成功。
这就是为什么如果有人能详细解释我这意味着什么,我将不胜感激。也许代码片段也有帮助。
非常感谢您的宝贵时间!
也许这也有助于解释:
在我的项目中,我认为只有一种情况可以应用此弃用通知:下面介绍的类executeGroupHandler的方法RouteCollection。我更愿意粘贴更多的类代码,以帮助您理解我使用该方法的上下文executeGroupHandler。
路由集合类:
<?php
namespace Packages\Router;
//...
use Packages\Router\RouteCollectionInterface;
/**
* Route collection.
*/
class RouteCollection implements RouteCollectionInterface {
//...
/**
* Group patterns list. Indexed array.
*
* Each time a group handler is executed its pattern is saved in this list.
* …Run Code Online (Sandbox Code Playgroud) 我正在使用Debian“Buster”(版本 10.3)和GNOME 桌面版本 3.30.2。
有没有办法仅使用终端命令而不安装任何剪贴板管理器来按需清除剪贴板?
感谢您的时间!
我正在将我的项目升级到 PHP 8.0+。到目前为止,在代码注释中,我使用了@param和@return标签,如“选项 1”,而不是“选项 2”:
选项1:
@param string[] ...。@return User[] ...。选项2:
@param array ...。@return array ...。不过,因为我不知道第一种形式是否被官方允许,所以我开始问自己,切换到第二种形式是否会更好......所以,我想问你:有吗?有没有可用的 PHP 代码文档官方PHPDoc 参考资料?
另外,是否建议使用第一个选项而不是第二个选项?换句话说:是否有任何反对的论据——也考虑到未来?
感谢您的时间。
PS :我找到了PHPDocumentor的参考资料,但我有一种感觉,它不是官方的 PHP 参考资料,而且还不兼容 PHP 8.0+。