【发布时间】:2023-03-09 20:29:01
【问题描述】:
我创建了一个php函数来返回或保存一些json,类看起来像这样。
<?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();
?>
我想知道的是,我能否以某种方式从字符串名称调用构造中的操作,而不是使调用 executeAction 的函数变大 if / else if 函数。提前谢谢你,丹尼尔!
【问题讨论】:
-
@zerkms
$this会使事情复杂化。 -
@kapa:
call_user_func(array($this, 'methodname')) -
@zerkms 嗯,好久没用 PHP 了。我以为你只能在数组中传递字符串。感谢您清理它。
-
我试过 call_user_func($action);和 $action();但他们不工作
-
@Pacuraru Daniel:你可能在使用之前阅读过函数文档。
标签: php