【问题标题】:How to solve "call to undefined function ..." problem in PHP 7.4.5, XAMPP 3.2.4, Windows 10 x64?如何解决 PHP 7.4.5、XAMPP 3.2.4、Windows 10 x64 中的“调用未定义函数...”问题?
【发布时间】:2021-11-19 09:33:47
【问题描述】:

我在 Windows 10 x64 上的 XAMPP 3.2.4 上使用 PHP 7.4.5 和 Apache 2.0。 PHP API 版本为 20190902。

我在“htdocs”目录中创建了一个 .php 文件,然后在该文件中定义了一个带有变量的类和一个启动这些变量的函数,然后在类定义下方,我正在创建该类的一个实例并调用它的函数。然后我从 XAMPP 控制面板启动了 Apache。当我在浏览器中以 http://localhost/problem.php 的形式打开这个 PHP 文件时,浏览器会显示这个错误:

Uncaught Error: Call to undefined function setParams() in D:\xampp\htdocs\problem.php:34 Stack trace: #0 {main} thrown in D:\xampp\htdocs\problem.php on line 34

函数是public的,所以类描述中的括号没有问题,没有范围问题,所以想不通这个问题是从哪里来的。你有什么想法吗?

附:我已经重启了Apache,结果还是一样。

这是problem.php的代码:

<?php

    phpinfo();

    abstract class Person {

        var $name; // = string;
    }

    class NaturalPerson extends Person {

        var $dayOfBirth; // = integer;

        var $MonthOfBirth; // = integer;

        var $YearOfBirth; // = integer;

        var $male; // = boolean;

        public function setParams ($d, $m, $y, $ml) {

            $this->dayOfBirth = $d;

            $this->MonthOfBirth = $m;

            $this->YearOfBirth = $y;

            $this->male = $ml;
        }
    }

    $np = new NaturalPerson();

    $np.setParams(1,2,1910,true);

    echo "<br>\n";

    var_dump($np);

?>

【问题讨论】:

  • 请提供minimal reproducible example。上面的代码在开头包含一个无用的?&gt;,但在开头甚至缺少必需的&lt;?php。也可能相关,您是如何执行该代码的?
  • 1.这段代码缺少的只是开头的
  • 2.我正在使用 XAMPP 3.2.4(Apache 2.0,PHP 7.4.5)在浏览器中输入此 URL:localhost/problem.php 3 在本地主机上运行此代码。非常感谢您纠正我的问题。我很感激。英语是我的第二语言。 4.正如其他评论者提到的,我必须使用“->”来调用类的成员函数,而不是“.”,这是一个字符串连接运算符。 5.感谢大家的回答!使用 -> 而不是 .解决了问题。

标签: php function class undefined


【解决方案1】:

正如其他人指出的那样,您正在使用字符串连接运算符来调用对象的成员函数。会发生什么:PHP 调用 $np 上的 __toString()(因为它是一个对象)并将“setParams()”函数的返回值附加到对象的字符串序列化值。

【讨论】:

  • 谢谢你这么详细的解释!它解决了这个问题。好久没用PHP写代码了,忘记是怎么做的了。
【解决方案2】:

在 PHP 中,要调用对象的函数,请使用“->”而不是“.”

$np->setParams(1,2,1910,true);

【讨论】:

  • 谢谢!它解决了这个问题。好久没用PHP写代码了,忘记是怎么做的了。
  • @BorisNY,很高兴为您提供帮助。
【解决方案3】:

你在调用函数上错了。你应该更新:

$np.setParams(1,2,1910,true); -> $np-&gt;setParams(1,2,1910,true);

您可以了解更多here

【讨论】:

  • 谢谢!它解决了这个问题。好久没用PHP写代码了,忘记是怎么做的了。
  • @BorisNY 很高兴为您提供帮助。如果适合您,请考虑将其作为可接受的答案。
猜你喜欢
  • 2021-08-06
  • 2014-04-16
  • 1970-01-01
  • 2014-06-23
  • 2011-03-01
  • 2021-12-06
  • 2019-07-03
  • 2011-11-13
  • 2017-04-12
相关资源
最近更新 更多