【问题标题】:Problem executing a class when using PHP CLI使用 PHP CLI 执行类时出现问题
【发布时间】:2011-07-05 08:53:54
【问题描述】:

我在 LAMP 环境中创建了一个包含以下代码的文件 test.class.php:

<?php

class MyClass 
{
    public var $variable;
};

$obj = new MyClass();

?>  

当我跑步时:

php myclass.php

从命令行,我得到错误:

解析错误:语法错误,意外的 T_STRING,在第 5 行的 /path/html/_dev/classes/test.class.php 中需要 T_OLD_FUNCTION 或 T_FUNCTION 或 T_VAR 或 '}'

如果我通过浏览器访问同一个文件,我不会收到任何错误。对可能发生的事情有什么建议吗?

【问题讨论】:

    标签: php class command-line command-line-interface


    【解决方案1】:

    想通了。 PHP 命令在我的环境中默认使用的 PHP CLI 版本是 PHP 4.4.8。

    我的主机还设置了一个 PHP5 命令以使用 PHP 5.2.14。当我执行命令时

    PHP5 myclass.php
    

    一切正常。但是,我最初发布的代码产生了另一个错误。

    public var $variable 
    

    line,这是另一个 Stack Overflow 帖子的解决方案,但不起作用。我把它替换为

    public $variable
    

    并且能够通过该更改成功测试。

    这个链接帮了很多忙 http://www.yiiframework.com/forum/index.php?/topic/4319-error-on-yiibase-php-on-line-55/

    【讨论】:

      【解决方案2】:

      确保您正在运行 php5 的 cli:

      $ php -v
      PHP 5.3.3 (cli) (built: Aug 22 2010 19:41:55) 
      Copyright (c) 1997-2010 The PHP Group
      Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
      

      您可以使用以下命令检查您正在使用的 php 版本或其所在位置:which php

      正如其他人所说,摆脱这个var。但这似乎不是问题。错误是报告private 是未知令牌。

      祝你好运!

      【讨论】:

      • 谢谢贡萨洛。此外,我发现我的主机有可用的 PHP5 命令,它有效。
      【解决方案3】:

      您不需要var 关键字;你应该使用:

      public $variable;
      

      这是正确的 PHP 5 语法。


      var 是 PHP 4 的遗留物,您会使用它:

      var $variable;
      

      但是 PHP 4 中没有 public 关键字 -- 并且 public (PHP 5)var (PHP 4) 不能一起使用。


      有关publicvar和其他同类关键字的更多信息,请参阅PHP手册的此页:Visibility


      至于为什么您的代码在您的网络服务器运行时没有显示任何错误...也许是配置的差异,导致错误不显示,在一种情况下?

      注意:CLI 和 PHP/Apache 可以使用不同的配置文件——而且经常这样做。



      作为旁注(它不会导致问题),您不需要在类定义末尾的分号:您的代码应该如下所示:

      class MyClass 
      {
          public $variable;
      }
      
      $obj = new MyClass();
      

      【讨论】:

        【解决方案4】:

        public var $variable; 太多了。只需使用其中一个关键字。

        【讨论】:

          【解决方案5】:

          去掉var关键字,没必要。

          <?php
          
          class MyClass 
          {
              public $variable;
          };
          
          $obj = new MyClass();
          
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-08
            • 2020-10-27
            • 1970-01-01
            • 1970-01-01
            • 2017-10-16
            • 1970-01-01
            • 2015-01-31
            • 1970-01-01
            相关资源
            最近更新 更多