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


Can I declare a custom function in code section?

我试图在php代码部分声明和调用函数,但十月没有看到它。下面是代码的样子:

function onStart() {
    return sayHi();
}
function sayHi() {
    return 'Hi';
}

你能告诉我这是怎么回事吗?这里是否只允许与页面生命周期相关的函数?(onStart(), onEnd(), onInit(), onRun()…等)

对于这样的问题,如果有的话,包含您收到的实际错误消息可能会很有帮助,这样人们就不会在错误的方向上开始疯狂地猜测。在这种情况下,实际上应该出现一个错误消息,如:

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

这个错误的原因是模板代码部分中的函数没有在全局作用域中定义,而是作为某个对象的方法定义的。因此,为了相互引用,您必须在section内的每个交叉函数调用之前使用$this->来指定您正在调用当前对象的方法,而不是全局函数。

ònStart()函数更改为

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

应该能使它工作。

但是,您可能需要考虑使用该返回语句想要实现什么。在十月份的onStart()和其他生命周期函数的设计方式中,通常不需要返回语句。但是如果它存在,页面执行周期在此时停止,返回值只是作为响应发送回浏览器。

如果您只是想在页面上显示消息"Hi"(并且在其他所有内容之前),那么您可能更好地这样做:

function onStart()
{
    $this->sayHi();
}
function sayHi()
{
    echo "<h1>Hi!</h1>";
}

,以便页面呈现周期之后仍然继续。但这实际上仍然不好,因为"<h1>Hi!</h1>"现在放在所有 else之前(也就是说,在开始的<html>标签或顶部的任何东西之前)。

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

(与此相关的是,这里有一些关于在OctoberCMS中发送自定义响应的正确用法的文档。)


(如果您想为OctoberCMS建立一个专门的stackechange社区,请支持OctoberCMS。课件的建议。我将删除这个烦人的消息,一旦目标实现-承诺:)

try:

function sayHi() {
    return 'Hi';
   }
function onStart() {
    return sayHi();
   }

否则,当执行到达return sayHi();时,它将不知道sayHi()函数。