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

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

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

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

Q&A

4回答

347閲覧

PHPで、配列を使って、動的な関数名を作りたい

ikkouenosenpai

総合スコア16

PHP

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

0グッド

1クリップ

投稿2019/04/14 07:45

PHPで、指定配列の値で関数を動的に実行する書き方があったら教えていただけませんでしょうか。

具体的には下記最後の「hoge();」によって、「fuga_tom();」と「fuga_mic();」を実行したいです。

自分的には「fuga_$name()」でそれをやっているつもりですが、どうすべきですか?

php

1<?php 2function hoge(){ 3 $names = ['tom','mic']; 4 foreach ($names as $name) { 5 function fuga_$name(){ // ←これではできない 6 echo 'my name is'.$name.'.'; 7 } 8 } 9} 10 11//「fuga_tom();」と「fuga_mic();」を実行したい 12hoge();

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

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

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

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

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

m.ts10806

2019/04/14 08:51

関数は定義してある前提ですか?それとも定義をしたいんですか?
guest

回答4

0

それぞれの関数が定義している前提ならこう。

php

1<?php 2function fuga_tom(){ 3 echo 'my name is tom.'; 4} 5function fuga_mic(){ 6 echo 'my name is mic.'; 7} 8 9function hoge(){ 10 $names = ['tom','mic']; 11 foreach ($names as $name) { 12 $func = "fuga_{$name}"; 13 $func(); 14 } 15} 16 17//「fuga_tom();」と「fuga_mic();」を実行したい 18hoge();

定義自体も可変にするのは無限に関数を作ってしまう可能性があるのでやらないほうが良いです。

投稿2019/04/14 09:00

m.ts10806

総合スコア80765

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

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

0

関数を呼ぶのは一応これでできます。

call_user_func
https://www.php.net/manual/ja/function.call-user-func.php

投稿2019/04/14 08:06

編集2019/04/14 08:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

こういうことかな?

CODE

class Test { public $names = [ "Tomy", "Cattleya" ] ; public function __call($func_name, $args) { $a = explode("_", $func_name, 2); if ($a[0] == "say") { if (in_array($a[1], $this->names)) { echo "My name is " . $a[1] . PHP_EOL; return; } } error_log("そんな関数ないです。"); } } $test = new Test(); $test->say_Tomy(); $test->say_Cattleya(); $test->say_John();

STDOUT

My name is Tomy My name is Cattleya

STDERR

そんな関数ないです。

投稿2019/04/14 09:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

これを実現するために、オブジェクト指向のclassが用意されています。

PHP: クラスの基礎 - Manual

サンプルコード

php

1<?php 2class Human { 3 //宣言 4 private $name = ''; 5 6 //コンストラクタ 7 function __construct($name) { 8 $this->name = $name; 9 } 10 11 // 名前の表示 12 public function print_name() { 13 echo 'my name is '.$this->name.'.'; 14 } 15} 16 17$tom = new Human('tom'); 18$mic = new Human('mic'); 19 20$tom->print_name(); 21$mic->print_name(); 22

投稿2019/04/14 08:01

編集2019/04/14 08:08
kou0179

総合スコア304

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問