小编dak*_*kis的帖子

PHP 8:将“资源”分配为属性、参数或返回类型

我正在将我的项目从 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)

php stream psr-7 php-8

12
推荐指数
1
解决办法
4505
查看次数

没有紧凑的MVC应用程序结构的原因?

在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

11
推荐指数
1
解决办法
313
查看次数

从资源创建流

我知道我可以使用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.其接口StreamFactoryInterfacePSR-17(HTTP工厂)提案中定义.

StreamFactoryInterface定义了一个名为方法createStreamFromResource,其中-符合其官方评论-应该:

从现有资源创建新流.

流必须是可读的并且可以是可写的.

因此工厂方法接收资源作为参数.并且,在其具体实现中,Stream创建了一个新对象 - 它也接收资源作为参数.

这是问题所在:

为简单起见,假设Stream该类仅适用于流,例如使用"stream"类型的资源.如果它收到的资源不属于"stream"类型,则会拒绝它.

那么,如果资源参数createStreamFromResource不是"流"类型的资源呢?如何将其转换为流,例如转换为"stream"类型的资源,以便我可以将其进一步传递给Stream使用它创建新对象的调用?是否有实现此任务的方法(PHP方法,函数或可能的转换函数)?

笔记:

  • 为清楚起见,我准备了一个完整的示例(testStream.php),我Stream用三种方式创建一个流,例如一个实例:一次直接,两次使用流工厂.
  • 我还发布了工厂接口的具体实现:StreamFactory带有方法的类createStreamFromResource.调用此方法应该是我创建流的第四种方法testStream.php.
  • 此外,我目前的课程StreamResponse,这样就可以直接测试所有,如果你想.这两个类是我的真实代码的一个非常简化的版本. …

php fopen stream php-stream-wrappers psr-7

10
推荐指数
1
解决办法
4183
查看次数

迁移到 PHP 8.0:使用 $this 时解除绑定 $this

我正在逐步将我的项目从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)

php php-7 php-7.4 php-8

7
推荐指数
1
解决办法
2648
查看次数

如何通过终端清除 Debian“Buster”中的剪贴板?

我正在使用Debian“Buster”(版本 10.3)GNOME 桌面版本 3.30.2

有没有办法仅使用终端命令而不安装任何剪贴板管理器来按需清除剪贴板?

感谢您的时间!

linux terminal clipboard debian debian-buster

5
推荐指数
2
解决办法
5725
查看次数

插件设计模式解释(如 Martin Fowler 所述)

正如 Martin Fowler 所解释的那样,我正在尝试理解和练习插件模式

我可以理解它以何种方式使用分离的接口模式,并且它需要一个工厂根据当前使用的环境(测试、生产、开发等)提供接口的正确实现。但:

  • 工厂究竟是如何读取环境值并决定创建哪个对象(实现IdGenerator接口)的?
  • 工厂是域对象 ( DomainObject)的依赖项吗?

非常感谢。

oop plugins design-patterns factory-pattern

2
推荐指数
2
解决办法
6675
查看次数

用于记录 PHP 代码的官方 PHPDoc 参考

我正在将我的项目升级到 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+。

php documentation phpdoc code-documentation phpdocumentor2

2
推荐指数
1
解决办法
2203
查看次数