2

使用active Record已经有一段时间了,我想换个环境,一些开发者朋友建议研究ORM,我看过的所有ORM项目都需要一个单独的类来扩展ORM类。

我的问题是:有没有什么方法可以在没有 的函数中使用 PHP 动态创建一个类eval

这就是我所拥有的:

<?php
    class Constructor
    {
            function new_class($class)
            {
                    $myself = get_called_class();
                    eval("class {$class} extends {$myself} { }");
            }
            function say_hi()
            {
                    $class = get_called_class();
                    echo "Hi, {$class}!";
            }
    }

    $constructor = new Constructor;
    $constructor->new_class("Greeter");

    $greeter = new Greeter;

    $greeter->say_hi(); // Hi, Greeter!

但是,我的客户告诉我,eval由于他在共享主机上,他的环境被阻止了。

4

1 回答 1

2

你可能不想这样做。但作为一种解决方法,您可以使用与 via 相同的方法eval(),但是一旦构建了要提供给 eval 的字符串,您只需将其写为文件并再次包含它。

像这样的东西:

function my_eval($str)
{
  $filename = uniqid().'.tmp';
  file_put_contents ($filename, $str);
  include $filename;
  unlink ($filename);
}

我是凭记忆写的,没有测试过,但我认为它应该可以解决问题。我现在看到的唯一警告是,您实际上仍然在做与 相同的操作eval(),并且此变体不允许您在与调用上下文相同的范围内创建变量(尽管您可以使用 $GLOBALS[] 来解决全局范围变量的问题)。

于 2013-03-16T13:48:18.587 回答