我目前有这个PHP代码;
private function generateSpecialPage(){
require_once("/view/pages/special.php");
}
Special.php是一个大多数用html填充的php文件。我试图从special.php。
中获取当前函数的名称如果我在require之前回显魔术常量FUNCTION,它会回应" generateSpecialPage",这就是我想要的。但是,如果我从special.php回显FUNCTION,它就不会回应。
我能够获得当前的课程'使用get_class($ this)从special.php里面命名,我想知道当前方法是否有同样优雅的解决方案。
答案 0 :(得分:0)
您应该重新组织代码,将require_once("/view/pages/special.php")
更改为单独的函数并传入函数名称。
如果您再次拨打generateSpecialPage()
,则不会执行任何操作。您可以通过将其更改为require()
来解决此问题,但之后您每次都在加载文件,这是不必要的。
答案 1 :(得分:0)
通用调用堆栈检查器将让您回顾一下获取调用者函数,类或对象,文件和行。我用作框架的一部分看起来就像:
function caller($offset = 0) {
return (new \Exception)->getTrace()[1+$offset];
}
在special.php
中使用此功能将产生所需的结果:
<?php echo caller(1)['function']; ?>
此时的调用堆栈为special.php -> require -> doSomethingSpecial
,因此我们使用1
偏移量跳过require
并获取doSomethingSpecial
帧。
但是,您可以考虑将视图重构为接收参数,而不是采用环境提示。通用视图加载器将是这样的:
function render($template, array $params = []) {
extract($params);
require $template;
}
然后会有一个看起来很喜欢的模板:
<?php echo "Hello {$caller}" ?>
可以被称为:
private function doSomethingSpecial() {
render('special.php', [ 'caller' => __FUNCTION__ ]);
}
我意识到这种打字比想要的更多,但它在长期内提供了更大的灵活性,因为它将视图与调用者分离。
答案 2 :(得分:0)
所需文件与所需文件的作用范围相同。
因此,您可以在需要文件之前简单地存储到变量:
'use strict';
angular.module("home", ['ui.router', 'home.controllers', 'urlLanguageStorage', 'pascalprecht.translate', 'ui.bootstrap', 'ngStorage'])
.config(['$stateProvider', '$translateProvider', '$urlRouterProvider',
function($stateProvider, $translateProvider, $urlRouterProvider) {
$translateProvider.useUrlLoader("home/mensajes");
$translateProvider.useStorage("UrlLanguageStorage");
$translateProvider.preferredLanguage("en");
$translateProvider.fallbackLanguage("en");
$stateProvider
.state("home", {
url: "/",
templateUrl: "resources/js/home/views/home/home.html",
controller: "HomeController"
});
$stateProvider
.state("contacto", {
url: "/contacto",
templateUrl: "resources/js/home/views/contact/contac.html",
controller: "HomeController"
});
}
])
.run(['$localStorage', '$http', function($localStorage, $http) {
if ($localStorage.token) {
$http.defaults.headers.common.Authorization = 'Bearer ' + $localStorage.token;
}
}]);
然后在private function generateSpecialPage() {
$caller = __FUNCTION__;
require_once '/view/pages/special.php';
}
中你有一个常规变量special.php
:
$caller