{"id":81,"date":"2021-12-07T09:35:23","date_gmt":"2021-12-07T00:35:23","guid":{"rendered":"https:\/\/www.b64.pw\/blog\/?p=81"},"modified":"2021-12-07T09:35:23","modified_gmt":"2021-12-07T00:35:23","slug":"php8-1%e6%96%b0%e6%a9%9f%e8%83%bd%e7%b4%b9%e4%bb%8b-pure-intersection-types","status":"publish","type":"post","link":"https:\/\/www.b64.pw\/blog\/?p=81","title":{"rendered":"PHP8.1\u65b0\u6a5f\u80fd\u7d39\u4ecb Pure Intersection Types"},"content":{"rendered":"\n<p>Type Hinting\u306b\u8907\u6570\u306e\u578b\u3092\u540c\u6642\u306b\u6e80\u305f\u3059\u3082\u306e\u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3002<\/p>\n\n\n\n<p>\u4e0b\u8a18\u306e\u4f8b\u306e\u3088\u3046\u306binstance of \u306a\u3069\u3067\u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\u304c\u7701\u3051\u308b\u3002<br>\u5927\u898f\u6a21\u306a\u958b\u767a\u3092\u3059\u308b\u969b\u306b\u306b\u306f\u5f79\u7acb\u3064\u3088\u3046\u306a\u6c17\u304c\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\r\n\r\ninterface IStatus{\r\n    function getStatus():int;\r\n    function setStatus(int $stat):void;\r\n}\r\n\r\nclass StatusBase{\r\n    protected int $status = 1;\r\n    public function getStatus():int{\r\n        return $this->status;\r\n    }\r\n}\r\n\r\nclass ServerStatus extends StatusBase implements IStatus{\r\n    public function setStatus(int $stat):void{\r\n        $this->status = $stat;\r\n    }\r\n}\r\n\r\nclass ServerHealth extends StatusBase{\r\n}\r\n\r\n\/\/ StatusBase\u304b\u3064IStatus\u3068\u3044\u3046\u578b\u306e\u307f\u53d7\u3051\u4ed8\u3051\u308b\r\nfunction intersection_types_test(StatusBase&amp;IStatus $stat){\r\n    $stat->setStatus(random_int(0,255));\/\/ instance of\u306a\u3069\u306e\u578b\u30c1\u30a7\u30c3\u30af\u4e0d\u8981\u3067\u5b9f\u884c\u3067\u304d\u308b\r\n    echo $stat->getStatus().PHP_EOL;\r\n}\r\n\r\n$ss = new ServerStatus();\r\n$sh = new ServerHealth();\r\n\r\nintersection_types_test($ss);\/\/ 1\r\nintersection_types_test($sh);\/\/ Fatal error: Uncaught TypeError:<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Type Hinting\u306b\u8907\u6570\u306e\u578b\u3092\u540c\u6642\u306b\u6e80\u305f\u3059\u3082\u306e\u3092\u6307\u5b9a\u3067 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81"}],"collection":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=81"}],"version-history":[{"count":2,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":83,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions\/83"}],"wp:attachment":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}