66084


**クラスを使用せず、1ファイルから呼び出す際は、下記で期待通り動作するのですが、**  
index.php

[code]

    require '../../composer/vendor/autoload.php';
    use Abraham\TwitterOAuth\TwitterOAuth;
    require_once('config.php');
    new TwitterOAuth(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_SECRET);
    
[/code]

* * *

**複数クラス(複数ファイル)から呼び出す際、下記ではエラー発生します**

> Uncaught Error: Class 'TwitterOAuth' not found

config.php

[code]

     require '../../composer/vendor/autoload.php';
     use Abraham\TwitterOAuth\TwitterOAuth;
    
[/code]

HogeController.php

[code]

    class HogeController extends Controller{
     new TwitterOAuth(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_SECRET);
    }
    
[/code]

* * *

**複数クラス(複数ファイル)から呼び出す際は、どうやって記述すればよいですか？**

config.php

[code]

     require '../../composer/vendor/autoload.php';
    
[/code]

方法A.各クラス(各ファイル)毎に下記記述が必要ですか？  
HogeController.php

[code]

    use Abraham\TwitterOAuth\TwitterOAuth;
    
    class HogeController extends Controller{
     new TwitterOAuth(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_SECRET);
    }
    
[/code]

方法B.そこからincludeする場合は、include先のファイルでも use が必要ですか？

HogeController.php

[code]

    use Abraham\TwitterOAuth\TwitterOAuth;
    
    class HogeController extends Controller{
     include(dirname(__FILE__).'/twitter.php');
    }
    
[/code]

twitter.php

[code]

    use Abraham\TwitterOAuth\TwitterOAuth;
    
    new TwitterOAuth(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_SECRET);
    
[/code]


CC BY-SA 4.0
2020-04-28T07:38:07.147
66062
2020-04-28T19:07:50.223
2020-04-28T07:43:53.573
7886
7886
question
php composer
名前空間が設定されているライブラリを、複数クラス(複数ファイル)から呼び出す方法について


ちとご質問の意味を勘違いしているかもしれませんが、requireなどで読み込まれるファイルをうまく記述することで、`use`を各ファイルごとに記述しなくてもいいようにできないか?と言うことだと理解しました。

PHPの公式ドキュメントに以下のような記載があります。

[名前空間の使用法:
エイリアス/インポート](https://www.php.net/manual/ja/language.namespaces.importing.php)

> **注意:**  
>  インポート規則はファイル単位のものです。つまり、インクルードされたファイルは インクロード元の親ファイルのインポート規則を 引き継ぎません。

(公式サイトなのに単純な綴りミスがありますが、それは置いといて。)

## _複数クラス(複数ファイル)から呼び出す際は、どうやって記述すればよいですか？_

上記の記述から、

### _方法A.各クラス(各ファイル)毎に下記記述が必要ですか？_

(「下記記述」がどこからどこまでを指すのかが不明ですが)  
→`use Abraham\TwitterOAuth\TwitterOAuth;`は各ファイルごとに必要

### _方法B.そこからincludeする場合は、include先のファイルでも use が必要ですか？_

→Yes.

と言うことが導き出されます。あなたの経験された事象についても、きちんと公式サイトの記述通り動いているように思われます。


CC BY-SA 4.0
2020-04-28T19:07:50.223
66084
2020-04-28T19:07:50.223
13972
66062
answer