call php function name from a string
本问题已经有最佳答案,请猛点这里访问。
我创建了一个PHP函数来返回或保存一些JSON,这个类看起来像这样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | <?php class calendarModel { // global variables var $user; var $action; var $connect; // init class function __construct($action ="getEvents") { $this->user = 1; $this->action = $action; $dbhost ="localhost"; $dbport ="5432"; $dbname ="fixevents"; $dbuser ="postgres"; $dbpass ="123"; $this->connect = pg_connect("host=" . $dbhost ." port=" . $dbport ." dbname=" . $dbname ." user=" . $dbuser ." password=" . $dbpass); $this->executeAction(); } // action router function executeAction() { if($this->action =="getEvents") $this->getEvents(); else if($this->action =="moveEvent") $this->moveEvent(); else if($this->action =="insertEvent") $this->insertEvent(); else if($this->action =="updateEvent") $this->updateEvent(); else if($this->action =="getCalendars") $this->getCalendars(); else if($this->action =="toggleCalendar") $this->toggleCalendar(); else if($this->action =="deleteCalendar") $this->deleteCalendar(); else if($this->action =="insertCalendar") $this->insertCalendar(); } // getEvents function getEvents() { //... } // moveEvent function moveEvent() { //... } // insertEvent function insertEvent() { //... } // updateEvent function updateEvent() { //... } // toggleCalendar function toggleCalendar() { //... } // deleteCalendar function deleteCalendar() { //... } // insertCalendar function insertCalendar() { //... } } // call class if(isset($_GET['action'])) $instance = new calendarModel($_GET['action']); else $instance = new calendarModel(); ?> |
我想知道的是,我是否可以从字符串名称中调用该构造中的操作,而不是将该if/else if函数变为名为
如果使用将使用函数名的表达式,则表达式的值将用作函数名:
1 2 3 | function executeAction() { $this->{$this->action}(); } |
由于您从用户输入中获取操作,请确保您对其进行了验证。否则,会有人发送使您执行任意方法的输入。
使用类似的方法:
1 2 3 4 5 | function __construct($action ="getEvents") { ... $this->$action(); } |
由于$action由用户定义,因此您可能需要检查$action是否是类中的现有函数:
1 2 3 |
Barmar几乎是正确的:$this->$action();