質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

5961閲覧

laravel5 クラスを変数名で呼び出したい

nabex

総合スコア66

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/11/08 06:51

laravel5でクラスの呼び出し方について教えて頂きたいです。

例としてSampleAclassというクラスのcommonメソッドがあった場合は、下記の書き方で
期待値通りの結果を取得することは出来ました。

lang

1$var = SampleAclass::common(); 2var_dump($var);

クラス名を呼び出す場合下記のようにクラス名を変数にして呼び出したいのですが、
500エラーが出てしまいます。

lang

1$class = 'SampleAclass'; 2echo $class; 3$var = $class::common(); 4var_dump($var);

$classの中にはSampleAclassだけでなく、jsonファイルから取得したクラス名が必要に応じて入るので、
var = SampleAclass::common();ではなく、
$var = $class::common();でクラス名を変数名で呼び出せるようにしたいです。

jsonファイルの部分は割愛してますが、
$class の中には画面からの選択に応じて、クラス名が複数入るので、
一つ一つクラスを呼び出すのは手間なのが変数名で呼び出したい理由です。

echo $class;した結果はSampleAclassと想定通り表示されたので、$classでクラスを呼び出せると思ったのですが、
500エラーが出てしまい、解決方がわかりません。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2016/11/08 06:58

phpのバージョンと500エラーの内容を教えていただけますか?エラーログ等確認いただければ何がエラーになったのかわかるはずです。
nabex

2016/11/08 07:09

phpのバージョンは5.6です。ログはどこに吐き出されているかわからないので調べてみます。
nabex

2016/11/08 07:15

ログを見たら Class 'クラス名' not foundのエラーが出てました。下記のサイトを見たらクラス名を文字列にするとエラーが表示されるとありました。http://dxd8.com/archives/110/
Archsted

2016/11/08 07:38

オートローダーが効いていない感じです。条件によって回答が変わるので次の2つを教えてください。SampleAclassに名前空間はありますか? また、SampleAclassが定義されたファイルはどこに置いていますか?
nabex

2016/11/08 07:49

SampleAclassに名前空間はあります。App\Libs\Sample\Studyです。
guest

回答2

0

ベストアンサー

これで動きますか?

PHP

1$class = 'App\Libs\Sample\Study\SampleAclass'; 2$var = $class::common();

投稿2016/11/08 08:01

Archsted

総合スコア452

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabex

2016/11/08 08:17

動きました。ありがとうございます。ここまでくればあとは自分でできそうなのでやってみます。
guest

0

記述しているクラス名等を「Sample」等ではなくそのままコピペ頂く事は出来ませんか。
同にもTYPOのような気がします。
ちなみに下記のコードは動きます。
PHP 5.4.45と7.0.11で動作確認済みです。

php

1class SampleAClass { 2 public static function common() { 3 return 'execute common()'; 4 } 5} 6$className = 'SampleAClass'; 7echo $className::common().PHP_EOL;

投稿2016/11/08 07:30

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabex

2016/11/08 07:51 編集

$className = 'SampleAClass'; echo $className::common().PHP_EOL; この書き方で試したのですが、500エラーとなってしまいましたので、 $className = new SampleAClass; echo $className::getRuletext().PHP_EOL; とさせたら呼び出すことは出来ました。PHPのバージョンの違いかはわかりません。
kunai

2016/11/08 07:51

$className = 'TabelogXMLAnnotator'; echo $className::getRuletext().PHP_EOL; これで動きませんか?
nabex

2016/11/08 08:06

そのままコピーして貼り付けたのですが500エラーで表示されませんでした。
nabex

2016/11/08 08:18

情報が足らずわかりにくかったと思いますがご親切にありがとうございました。ネームスペースなどの情報もあったほうが良かったですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問