首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP7中输入属性提示?

在PHP7中输入属性提示?
EN

Stack Overflow用户
提问于 2016-05-16 21:07:58
回答 2查看 61.9K关注 0票数 91

php 7是否支持类属性的类型提示?

我的意思是,不仅仅是setter/getter,还有属性本身。

类似于:

代码语言:javascript
复制
class Foo {
    /**
     *
     * @var Bar
     */
    public $bar : Bar;
}

$fooInstance = new Foo();
$fooInstance->bar = new NotBar(); //Error
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-17 05:28:46

PHP7.4这样的will support typed properties

代码语言:javascript
复制
class Person
{
    public string $name;
    public DateTimeImmutable $dateOfBirth;
}

PHP 7.3及更早版本不支持此功能,但也有一些替代方案。

您可以创建一个私有属性,它只能通过具有类型声明的getter和setter来访问:

代码语言:javascript
复制
class Person
{
    private $name;
    public function getName(): string {
        return $this->name;
    }
    public function setName(string $newName) {
        $this->name = $newName;
    }
}

您还可以创建一个公共属性,并使用docblock向阅读代码并使用IDE的用户提供类型信息,但这不提供运行时类型检查:

代码语言:javascript
复制
class Person
{
    /**
      * @var string
      */
    public $name;
}

实际上,您可以将getter、setter和docblock组合在一起。

如果你更喜欢冒险,你可以用__get, __set, __isset and __unset magic methods做一个假的属性,然后自己检查类型。不过,我不确定是否会推荐它。

票数 145
EN

Stack Overflow用户

发布于 2016-05-16 21:41:32

您可以使用setter

代码语言:javascript
复制
class Bar {
    public $val;
}

class Foo {
    /**
     *
     * @var Bar
     */
    private $bar;

    /**
     * @return Bar
     */
    public function getBar()
    {
        return $this->bar;
    }

    /**
     * @param Bar $bar
     */
    public function setBar(Bar $bar)
    {
        $this->bar = $bar;
    }

}

$fooInstance = new Foo();
// $fooInstance->bar = new NotBar(); //Error
$fooInstance->setBar($fooInstance);

输出:

代码语言:javascript
复制
TypeError: Argument 1 passed to Foo::setBar() must be an instance of Bar, instance of Foo given, called in ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37254695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档