基本上,我不确定这是一个解析代码的PhpStorm问题,还是一个奇怪的PHP和接口问题,但基本上我有下面的接口
<?php
namespace App\Contracts;
/**
* Interface IFileSource
* @package App\Contracts
*/
interface IFileSource
{
public function getFilesByPattern(string $filePattern) : array;
}具有以下实现
<?php
namespace App\Sources;
use App\Contracts\IFileService;
use App\Services\File\FileService;
/**
* Class FileSource
* @package App\Sources
*/
class FileSource implements IFileSource
{
/**
* @var FileService
*/
private $fileService;
public function __construct (IFileService $fileService)
{
$this->fileService = $fileService;
}
/**
* @param string $filePattern
* @return File[]
* NOTE THIS ASSUMES FILESYSTEM
*/
public function getFilesByPattern (string $filePattern) : array
{
$filesDetails = $this->fileService->getFilesByPattern($filePattern);
return [];
}
}以及使用
<?php
namespace App\Console\Commands;
use App\Contracts\IFileSource;
use App\Sources\FileSource;
class ImportXML extends Command
{
/**
* @var FileSource
*/
protected $fileSource;
public function __construct (IFileSource $fileSource)
{
parent::__construct();
$this->fileSource = $fileSource;
}
public function handle () : void
{
$filePattern = 'APATTERN';
$files = $this->fileSource->getFilesByPattern($filePattern)
}
}我的问题是有关这项实施的使用。
因此,以下是一个有效的用法:
$filePattern = 'APATTERN';
$this->fileSource->getFilesByPattern(filePattern)但出于某种原因,以下内容也被视为一种有效用法?
$filePattern = 'APATTERN';
$this->fileSource->getFilesByPattern(filePattern,filePattern,filePattern,filePattern,filePattern,filePattern,filePattern)为何它不关心我不符合我的执行呢?
发布于 2019-09-05 12:59:58
所以万一别人偶然发现了这个,
感谢LazyOne帮助我解释我做错了什么
这是因为我在PHPdoc中强制执行实现,而不是依赖接口来执行类型提示(或者将接口添加为类型提示而不是实现),一旦我更改了它,它就会像预期的那样开始抱怨。
当接口的重点是执行这样的事情时,为什么要执行一个实现。
Doh
发布于 2019-09-05 10:25:40
为什么它不关心我不符合我的执行
这就是接口的全部意义--他们不关心实现。他们只关心如何定义方法,以及签名是否符合接口。
但是,我认为这里提出的真正问题是,为什么当多个参数被传递给函数时,PHP解释器不会抛出异常。答案是因为这就是PHP实现重载的方式。它们允许传递变量数量的参数,您可以使用诸如func_get_args之类的函数访问这些参数。
您肯定应该阅读https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list,并查看新的(Ish) splat运算符...。
相似QAs
https://stackoverflow.com/questions/57802825
复制相似问题