Home >Backend Development >PHP Tutorial >PHP中的元编程

PHP中的元编程

WBOY
WBOYOriginal
2016-06-06 20:50:001458browse

看了定义还是一头雾水。

能不能用通俗一点的语言或者例子解释一下,什么是PHP(ruby)中的元编程?

回复内容:

看了定义还是一头雾水。

能不能用通俗一点的语言或者例子解释一下,什么是PHP(ruby)中的元编程?

举个例子来说:
“编程”相当于我做了一台机器,这台机器能帮我扫地(扫地机)。
“元编程”就是我做了一个能够制造“扫地机”的机器。这个机器能够生产出许多的扫地机,它生产出来的扫地机会帮我扫地。

<code><?php // 这是普通的 PHP 代码
  echo 1;
  echo 2;

  // 这就叫元编程,浅显的说,凡是能生成、修改其他代码的代码,都叫元编程
  $code = '';
  for($i = 1; $i < 100; $i++) {
    $code .= "echo $i;";
  }
  eval($code);

?>
</code>

元编程”,又叫Metaprogramming,其本质仍然是“编程”,而比简单的“编程”多出来的就是可以动态的生成可执行代码。

生成代码的方式有很多种。比如C语言的预处理宏、闭包/对象和一些特定的结构(Lisp中的宏和C++的模板)等等(动态语言中可以直接eval的字符串虽然也可以算是“动态生成代码”,但总体应该归为动态语言的特性)。

元编程并不是一个拿来玩玩的或者是束之高堂的无用之物。模板元编程是C++的精华之处,也是C++标准库的基础;知名Ruby项目中几乎处处可见元编程,而Ruby也因为元编程而变得更具表达和实现力。

比如:

<code>//C++ 模板
template<typename t>    //对任意类型T进行声明和定义
class vector{
    ...
};

vector<int> vec;  //编译期自动生成vector<int>类型的各项代码
</int></int></typename></code>

和Ruby元编程

<code class="lang-ruby">#Ruby中一个简单的类定义
class D
  def a
    'a'
  end
  def b
    'b'
  end
  def c
    'c'
  end
end

#=> 下面是等价代码:
D2 = Class.new do
    [:a,:b,:c].each do | sym |
      #在each中动态生成三个类方法
      define_method sym, { sym.to_s }
    end
  end
</code>

简单的使用元编程,可以简化工作,并且能够在一定程度上使代码更具表达力。而深度的元编程甚至可以很大幅度的提升工作效率,但是往往付出的代价是需要对其有深入的理解和实践。

另外,做个补充,PHP的动态特性虽然常常被指责和滥用,但是如果能够做出一些好的封装和设计,也能有一些不错的元编程特性。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn