【问题标题】:Events on PHP. Is it possible?PHP 上的事件。可能吗?
【发布时间】:2011-01-13 17:25:59
【问题描述】:

我来自 C# 世界,刚刚开始编写一些 PHP 编码,所以我想知道是否可以在 PHP 上使用事件,或者是否计划在未来的版本中包含此功能。如果你有办法模拟它,不同于this,将不胜感激,谢谢。

【问题讨论】:

  • 对不起,但我不明白你的评论......我不会说英语,所以如果我犯了错误,我请求道歉
  • 您可以使用函数指针来实现粗略的事件处理,但如果您期望 C# 委托的合适和完成,您会感到失望。
  • 是的,事件处理充其量只是粗略的。保持低期望。
  • @Earlz - 我认为您的意思是变量函数。 Jhonny,检查一下:php.net/manual/en/functions.variable-functions.php 第二个示例,“示例 #2 变量方法示例”可能会对您有所帮助。
  • @Richard,添加到工具箱的好技巧:D

标签: php events language-features


【解决方案1】:

在 PHP 中没有像 C# 这样的事件,但您可以实现 Observer Pattern 来附加要通知的委托。

【讨论】:

    【解决方案2】:

    Prado PHP Framework 是一个事件驱动的框架,可能会吸引您,尤其是因为您来自 C# 领域并且可能是 ASP.NET。

    看看Quick Start。具体来说,看一下控件参考下的代码。有很多代码示例供您查看,看看它是否与您正在寻找的内容相似。

    【讨论】:

      【解决方案3】:

      Stubbles 有一个相当不错的Event Dispatcher

      【讨论】:

        【解决方案4】:

        SPL - Standard PHP Library 提供了 SplObserverSplSubject 接口,用于在 PHP 中实现观察者模式

        【讨论】:

          【解决方案5】:

          我也会推荐普拉多。

          【讨论】:

            【解决方案6】:

            你可以在 PHP 中创建类似事件处理类的东西:

            class Event {
                protected $_eventCallbacks = array();
                function addEventCallback($callback) {
                    $this->_eventCallbacks[$callback] = $callback;
                }
                function removeEventCallback($callback){
                    if(isset($this->_eventCallbacks[$callback])){
                        unset ($this->_eventCallbacks[$callback]);
                    }
                }
                function cleanEventCallback(){
                    foreach ($this->_eventCallbacks as $callback) {
                        unset ($callback);
                    }
                }
                function fireEvent() {
                    foreach ($this->_eventCallbacks as $callback) {
                        call_user_func($callback);
                    }
                }
            }
            

            此代码取自这里http://setahost.com/php-events-singletone-and-factory-pattern-application/ 还有使用此类的模块化和子模块化应用程序的很好示例。

            【讨论】:

              猜你喜欢
              • 2015-12-26
              • 2016-02-14
              • 2018-12-26
              • 1970-01-01
              • 2013-02-22
              • 2017-11-30
              • 1970-01-01
              • 2023-04-11
              • 2022-06-23
              相关资源
              最近更新 更多