Blade 自定义指令扩展,返回子串中的函数后面不需要圆括号?
如下是我进行blade扩展指令测试的代码:
view/test.blade.php:
@extends('layouts.default')
@section('content')
@MyDirective(true)
@stop
MyDirectiveServiceProvider.php:
<?php
namespace GrahamCampbell\BootstrapCMS\Providers;
use Illuminate\Support\ServiceProvider;
class DirectTestServiceProvider extends ServiceProvider
{
public function boot()
{
$view = $this->app->view;
$blade = $view->getEngineResolver()->resolve('blade')->getCompiler();
$blade->directive('MyDirective', function ($paras) {
return "<?php echo microtime{$paras} ?>"; // no"()", but still works!!!!!
});
}
public function register()
{
}
}
PHP语言中一般把$paras解析到函数名里,但这里blade却把$paras解析成了函数参数。也就是说,这里的microtime函数后面不加圆括号,也能被正常当做函数处理!也就是说,如下两行代码相同都能正常工作(已经测试过):
return "<?php echo microtime({$paras}) ?>";
return "<?php echo microtime{$paras} ?>";
那么,为什么derective函数返回的字串,在blade模板中解析成了"microtime($paras)", 而不是解析成一个"microtimetrue"函数?这是为啥?
推荐文章: