【问题标题】:Understanding how frameworks are made了解如何制作框架
【发布时间】:2015-03-16 12:34:08
【问题描述】:

我曾使用过 Cocoa for iOS、Qt (c++) 等框架,现在我正在学习 Laravel。我的主要问题是关于框架内的独特语法。例如,Laravel 有其独特的 IF 语句语法,它与 PHP 中使用的完全不同。

Laravel

@if(condition) 

@else
 // code

@endif

PHP

if (condition) 
{
    //code
} 
else 
{
    //code
}

如何在框架中添加额外的语法?这是通过使用普通 PHP 完成的,还是他们修改了核心 PHP 代码以使其行为不同,以便识别新语法?

我想一个更简单的问题是,创建框架的人是否需要访问该语言的核心代码,或者他们只是使用该语言提供的内容并围绕它构建他们的框架?

类似thread,但没有回答我的问题。

【问题讨论】:

  • 这是一种模板语言,它不修改PHP,不;它使用 PHP 来解析模板并渲染它。 Twig 会做不同的事情,Smarty 会再次做不同的事情。如何构建模板引擎,以及构建哪些功能是设计决策,需要在易用性和性能之间进行权衡。
  • 从技术上讲,这不是 Laravel 语法,而是 blade 语法...blade 只是一个模板引擎(Laravel 附带的默认模板引擎),例如 twigmustachesmarty
  • 这种语法只用在 templates 中,而不是在 Laravel 的任何地方。这些模板由模板引擎处理,该引擎根据自己的规则解析文件。核心 PHP 与它没有任何关系。您要问的是如何构建模板引擎或自定义解析器。为此,学习一些关于解析器的知识。它远没有你想象的那么神奇。
  • 啊,现在明白了。谢谢大家的澄清。

标签: php laravel


【解决方案1】:

回答您的特定问题:

如何在框架中添加额外的语法?这是通过使用普通 PHP 完成的,还是他们修改了核心 PHP 代码以使其行为不同,以便识别新语法?

是的,这是使用blade templating engine 完成的。 Blade 主要解析文件 (*.blade.php) 并用纯 php 替换其序列,稍后执行。 PHP 本身已经可以说是一种模板语言,但制造商似乎认为它不够简单或不够富有表现力。如果您想了解更多信息,请查看文档或观看相应的 Laracasts 剧集(L4-Blade BasicsL4-Master-PagesL5-Blade101)。看看BladeCompiler 看看这是怎么做到的。

创建框架的人是否需要访问该语言的核心代码,或者他们只是使用该语言提供的内容并围绕它构建他们的框架

好吧,我不确定这是否适用于 100% 的框架,但在大多数情况下,我会说是的。不过,他们有可能使用未直接包含在基础语言/技术中的其他技术(比如我想的用于 C# 的 .NET,它基于一些非 c# 组件),但我强烈怀疑许多(如果有的话)框架改变基础技术的核心。

顺便说一句。可以为非开源技术创建框架,其中。在这些情况下,不可能修改基础技术的核心,因为您根本无法访问它

框架可以被认为是围绕其基础技术的包装器,旨在让开发人员更轻松地完成一些(经常需要的)任务。但我所知道的并没有改变它的基础核心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多