複数の名前空間が同じ親クラスを持つことはできますか?

名前空間を定義したファイル内から利用するには、名前の先頭に \ をつける必要があります。
2021年6月25日
ユーザー

はじめまして。
いつも楽しく分かりやすい動画をありがとうございます。

本日は、複数の名前空間が同じ親クラスを持つことが出来ないのか分からなかったため、ご質問させて頂きました。

(例)

…base.php (共通の親クラスにしたい)…

<?php
class Posts{
  protected $text;
  function __construct($text){
    $this->text=$text;
  }  
}

…name1.php (名前空間1)…

<?php
namespace User1\Test1;
require("base.php");
class Red extends Posts{
  public function show(){
    echo $this->text."は赤色!".PHP_EOL;
  }
}

…name2.php (名前空間2)…

<?php
namespace User2\Test2;
require("base.php");
class Green extends Posts{
  public function show(){
    echo $this->text."は緑色!".PHP_EOL;
  }
}

…func.php (実行)…

<?php
require("name1.php");
require("name2.php");
$post1=new User1\Test1\Red("チームA");
$post2=new User2\Test2\Green("チームB");
$post1->show();
$post2->show();

上記のコードで実行すると、

Class 'User1\Test1\Posts' not found

と出てきました(func.phpで親クラスをrequireしても同じでした)。

親クラスをbase.phpからrequireせずに名前空間のファイル内に書くと上手く動きましたが、毎回書いていれば時間がかかり過ぎてしまうのではと思いました。

どのような解決策があるのでしょうか?
お忙しいところ恐縮ですが、教えて頂けたらありがたいです。

この回答を見るにはプレミアムサービスへの登録が必要です

プレミアムサービスとは?