我可以在代码部分声明自定义函数吗?

时间:2016-10-19 11:55:09

标签: php octobercms

我试图声明并调用某个部分的php代码部分中的函数但是10月没有看到它。 这是代码的样子:

function onStart() {
    return sayHi();
}

function sayHi() {
    return 'Hi';
}
你能告诉我这有什么问题吗? 这里唯一允许的功能是与页面生命周期相关的功能吗? (onStart(),onEnd(),onInit(),onRun().. etc)

2 个答案:

答案 0 :(得分:2)

有时候这些问题可能会有所帮助,包括你收到的实际错误信息,以便人们不会开始疯狂地猜错方向。在这种情况下,实际上应该出现如下错误消息:

  

错误:调用未定义的函数sayHi()

这里出现此错误的原因是模板代码部分中的函数未在全局范围内定义,而是作为某个对象的方法定义。因此,为了相互引用,您必须在部分内的每个交叉函数调用之前加上$this->,以指定您正在调用当前对象的方法,而不是全局函数。

ònStart()功能更改为

function onStart() {
    return $this->sayHi();
}

应该让它发挥作用。

但是,您可能想要考虑使用该return语句实现的目标。设计了10月份onStart()和其他生命周期函数的方式,通常不期望返回语句。但如果它存在,那么页面执行周期就会暂停,返回值只是作为响应发送回浏览器。

如果您只是想显示消息“嗨,那么'在页面上(以及其他所有内容)之后,您可能会更好地这样做:

function onStart()
{
    $this->sayHi();
}

function sayHi()
{
    echo "<h1>Hi!</h1>";
}

以便之后页面呈现周期仍然继续。但实际上这仍然不太好,因为"<h1>Hi!</h1>"现在在所有其他之前(即在开始<html>标记之前或者在顶部的任何内容之前被放出)

我想你实际上并不是想以这种方式使用它,除了用于功能测试之外,但无论如何,认为解释可能是好的,这样人们就会知道如果他们偶然发现它会发生什么。 ;)

(在相关说明中,这里有一些关于sending a custom response in OctoberCMS的正确用法的文档。)

(如果你想为OctoberCMS建立一个专门的stackechange社区,请支持octobercms.stackexchange proposal。一旦达到目标,我将删除这条消息 - 承诺: ))

答案 1 :(得分:0)

尝试:

function sayHi() {
    return 'Hi';
   }

function onStart() {
    return sayHi();
   }

另外,当执行到达return sayHi();时,它不知道函数sayHi()。一些literature about it...