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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5795閲覧

PHPでの動的にメソッドを実行する方法。

peyoung

総合スコア122

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2014/10/15 01:14

PHPで、同じクラスの中で動的にメソッドを実行する方法はありますか?

下記に似ていることをしたいです。

lang

1$this->$method($argument1, $argument2, $argument3);

上記の$methodの名前で処理を変えたいと思っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

やり方はいろいろありますよ。

lang

1<?php 2 3class testClass { 4 public function fast_view($argument1, $argument2,$argument3) { 5 echo __METHOD__, "速い順:1位$argument2,2位$argument1,3位$argument3"; 6 } 7 8 public function large_view($argument1, $argument2,$argument3) { 9 echo __METHOD__, "大きい順:1位$argument1,2位$argument2,3位$argument3"; 10 } 11 12 public function test($method) { 13 $argument1 = "ゾウ"; 14 $argument2 = "チーター"; 15 $argument3 = "かめ"; 16 // 下記動的にメソッドを実行する3つのやり方 17 $this->{$method}($argument1, $argument2, $argument3); 18 $this->$method($argument1, $argument2, $argument3); 19 call_user_func_array(array($this, $method), array($argument1, $argument2, $argument3)); 20 } 21} 22$test_class = new testClass(); 23// 引数のメソッド名で出力が変わります 24echo $test_class->test("large_view"); 25?>

投稿2014/10/16 07:30

saori92

総合スコア139

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

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

0

マジックメソッドを利用する方法もあります。
__callまたは__callstaticメソッドをクラスに定義しておくと存在しないメソッドが呼ばれた時の動作を定義することが可能になります。

http://php.net/manual/ja/language.oop5.overloading.php

`
class Sample
{
public function dynamicCallMethod($method)
{
return $this->$method(3, 5, 7);
}

public function __call($name, $arg)
{
switch ($name) {
case 'foo':
return 'called method: ' . $name . ', result: ' . ($arg[0] + $arg[1] + $arg[2]);
break;
case 'bar':
return 'called method: ' . $name . ', result: ' . ($arg[0] * $arg[1] * $arg[2]);
break;
case 'baz':
return 'called method: ' . $name . ', result: ' . ($arg[0] . $arg[1] . $arg[2]);
break;
default:
throw new Exception('undefined method ' . $name);
break;
}
}
}

$obj = new Sample;
try {
foreach (['foo', 'bar', 'baz', 'foobar'] as $method) {
echo $obj->dynamicCallMethod($method) . PHP_EOL;
// echo $obj->$method(3, 5, 7) . PHP_EOL; ←こっちでも結果は同じ
}
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

// called method: foo, result: 15
// called method: bar, result: 105
// called method: baz, result: 357
// undefined method foobar
`

投稿2014/10/16 14:41

motoyan_k

総合スコア50

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問