【问题标题】:Syntax error in PHP after upgrading to 5.4升级到 5.4 后 PHP 出现语法错误
【发布时间】:2015-06-14 21:18:04
【问题描述】:

自从我从 PHP 5.2x 或 5.3x(不确定是哪个)升级到 5.4x 后,我收到以下错误:

syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_VARIABLE

以下是产生错误的代码。本质上,我有一个类来创建 SVG 图像,该类使用派生类中定义的静态 draw() 方法和使用 Imagick 将 SVG 转换为 PNG 的基类上的静态辅助函数 drawPng()。错误在标记线处。

static function drawPng($filename, $data, &$options=array()) {
    ob_start();
    static::draw($data, $options); // <-- Error occurs
    $svg = ob_get_clean();

    $im = new Imagick();
    if(!$im) die('Imagick not installed');
    $bg = (empty($options['background']) ? 'transparent' : $options['background']);
    $im->setBackgroundColor(new ImagickPixel($bg));
    $im->readImageBlob($svg);
    $im->setImageFormat('png');
    if($filename) $im->writeImage($filename);
    else echo $im->getImageBlob();
}

如上所示的代码在升级之前一直有效。感谢您的帮助。

【问题讨论】:

  • 你在升级过程中改变了你的 php.ini 吗?
  • T_PAAMAYIM_NEKUDOTAYIM 表示“双冒号”。试试self::draw 而不是static::draw 也许?
  • 您确定代码在升级之前有效吗? LSB 在 5.3 中添加
  • 也许我在 5.3 上。我的虚拟主机在没有告诉我的情况下升级到了 5.4,是的,在升级之前的过去 6 个月里一直有效

标签: php


【解决方案1】:

T_PAAMAYIM_NEKUDOTAYIM 是双冒号的希伯来名称(出于某种原因 - Zend 是由以色列人创建的,正如 ceejayoz 指出的那样。)用于双冒号,也就是 ::

static 更改为self

static::draw($data, $options);

self::draw($data, $options);

【讨论】:

  • “出于某种原因”是 Zend 是由以色列人创建的。
  • 好吧,我不知道。不过我现在这样做了。
  • 那没用,错误说:Call to undefined method Chart::draw() 它不是因为该方法在派生类中
  • 我相信你已经知道了,self 指的是静态上下文中的当前工人阶级。所以你确实需要 draw 方法在当前类中并且是静态的。
【解决方案2】:

我认为您弄乱了 PHP 版本,实际上是在 PHP 5.2 上启动此代码。这个错误会在 PHP 5.2 中发生,因为没有 static:: 访问。此外,PHP 5.4 中 T_PAAMAYIM_NEKUDOTAYIM 的错误消息会提到“::”,而您的则没有,这是另一个提示您运行的 PHP 版本错误。

验证添加 echo phpversion();出口();到此方法的顶部。

【讨论】:

  • 正如我在上面的评论中所说,我的虚拟主机删除了 PHP 5.3 并用 PHP 5.4 替换了它。当我的网站无法在 PHP 5.4 中正确呈现时,他们恢复到 PHP 5.2 故障保护,它不理解 LSB。不知道为什么虚拟主机会在没有客户先运行的情况下进行更改。我的未来可能会有一个新的虚拟主机。
  • @steveo225 - “他们恢复到 PHP 5.2 故障保护” - 哎呀,多么奇怪的方法。
  • 同意。他们总是安装 2 个 PHP 版本并让用户选择,但当出现问题时,旧版本也是一种故障保护。我认为他们这样做是因为许多旧脚本在较新版本的 PHP 中无法运行,而且人们没有修复它们,或者至少他们是这样暗示我的
  • 那么你能切换到 PHP 5.3 吗?只要这样做,错误就会消失。
  • 如果 5.2 被认为是“故障安全”,我肯定会切换主机 - 四年多来没有更新安全性。哎呀!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
相关资源
最近更新 更多