0

所以我有一个名为WingStyle的项目:https ://github.com/IngwiePhoenix/WingStyle 它还在开发中,我需要一些东西让它更聪明一点。

在某种程度上,我想摆脱一些引号 - 以“html”为例。当用户调用一个尚不存在的函数时,框架会为此目的自动加载该类,然后运行该函数。在自动加载的过程中,有一个__construct方法被触发。

我们以函数color为例。在正常情况下,用户会这样称呼它:

<?=WS(...)
    ->color("white")
->end?>

但是您可能知道,我们有一组默认颜色 - 白色、黑色、红色、橙色等。现在的问题是,当我尝试使用上面没有引号的代码时,我得到了典型的"use of undefined constant"错误。这就是为什么我编写了一个加载器函数,它只触发初始化代码,然后添加所需的常量。

据我所知,解释器在执行代码之前会看到未定义的常量 - 所以当然,我不能在常量进入之前触发初始化代码......

有没有办法让解释器首先触发初始化代码然后看到常量?我真的不介意坚持我的加载方法,但是添加东西会很烦人。我真的很想知道一种可以即时添加常量的方法。

查看项目源代码以了解我的意思。

问题的功能和机制见于:

classes/WingStyleBase.php:
  - addDefs()
classes/WingStyleManager.php
  - __get()
4

1 回答 1

0

我认为没有在 PHP 中添加动态常量的好方法,尽管理论上您可以编写然后导入自定义 *.php 文件或其他东西。

当然,这打破了“恒定”的含义。如果它要在运行时改变,你真的需要一个全局变量。

在这里也对你没有帮助,因为如果你或其他人调用->color(white)white 将在它被传递给之前color被评估,在你的调用应用程序的上下文中。如果您想允许这种行为发生,只需white尽早声明一个常量并在您的代码中随意使用它。

于 2013-06-09T14:51:31.783 回答