我经常遇到这个奇怪的错误
Warning: Declaration of Proxies\__CG__\AppBundle\Entity\MyEntity::setName(string $name):
AppBundle\Entity\MyEntity should be compatible with AppBundle\Entity\MyEntity::setName(?string $name):
AppBundle\Entity\MyEntity
Run Code Online (Sandbox Code Playgroud)
为什么发生这种情况?为什么我没有
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
Run Code Online (Sandbox Code Playgroud)
作为我的二传手?如果我删除'?',它可以工作,但我确实需要它用于其他目的
我以前一直readline在控制台命令中使用,但今天我遇到了fread和fgets函数,我的问题是:使用这两种方法有什么区别:
// first
$inputLine = readline();
// second
$inputLine = fgets(STDIN);
Run Code Online (Sandbox Code Playgroud)
他们的做法几乎相同,不是吗?
我找不到可靠的来源,以确保我能够在内部抛出异常__destruct().
这就是php文档所说的
尝试从析构函数中抛出异常(在脚本终止时调用)会导致致命错误.
但是当我测试它时
class A
{
public function __destruct()
{
throw new \Exception();
}
}
try {
$a = new A();
} catch(\Exception $x) {
var_dump($x);
}
Run Code Online (Sandbox Code Playgroud)
看来这不是真的.我通常抛出并捕获异常.那么,为什么文档得到这条线?
马克·贝克回答后编辑:
它实际上工作,异常可以抛出并从析构函数中捕获.我仍然不确定为什么文档存在.
我在文档中没有找到有关此内容的信息,但它的存在似乎合乎逻辑。如何为返回类型值创建类型提示object?(我说的是任何对象,而不是例如某个对象\DateTime等)
function getParticipant(): ?object
{
//...
$x = new Cat();
return $x;
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,真正不公平的是,这print getType($x)会导致object。所以我们有一个object类型,但不能严格地说我们将返回一个object?
你可能会说这真的没有必要,我可以直接写: Cat,但是当我覆盖* @return object|null */他的 PHPDoc 中的方法时,这不是我需要的。
如果我们在语法上指定shell脚本的各个部分,那么shebang应该放在哪里,这是注释的特殊情况吗?
php ×3
php-7.1 ×2
bash ×1
destructor ×1
doctrine-orm ×1
exception ×1
fgets ×1
fread ×1
io ×1
php-7 ×1
readline ×1
shebang ×1
shell ×1
symfony ×1
type-hinting ×1