【问题标题】:Declaring variable without var sign in beginning? [closed]在开始时声明没有 var 符号的变量? [关闭]
【发布时间】:2011-08-18 00:22:08
【问题描述】:

我看到类说 var _hello_kitty = array(); 为什么他们不使用 $?我试图使它成为publicstatic,如果不添加$i.e. 它就无法工作。 public static $_hello_kitty = array();

现在,当我添加 $ 其他通过 _hello_kitty 引用它的函数时停止工作。

编辑:OOOPS 是我的错,我以某种方式从那里删除了 $,我循环了原始文件并在那里。但它仍然像 $this->_tpl_vars[$tpl_var] = &$value 没有 $ 引用,我不能使用 self::_tpl_vars[$tpl_var];

现在我确实使用了 self::$_tpl_vars[$tpl_var];但现在出现错误array_merge() [function.array-merge]: Argument #1 is not an array i

【问题讨论】:

  • 是的,它在 Smarty php 模板语言文件 Smarty.class.php 里面是清晰的 php
  • 等等 - 你是在 smarty 模板中分配变量吗?
  • OOOPS 是我的错,我以某种方式从那里删除了 $,我循环了原始文件及其那里。但它仍然像 $this->_tpl_vars[$tpl_var] = &$value;
  • 感谢您让我们知道错误,Poemm。继续delete这个问题。 $this->_tpl_vars[$tpl_var] 是有效的 php 以及您访问成员变量的确切方式。
  • 您需要阅读 PHP 中类和对象的基础知识。 php.net/manual/en/language.oop5.basic.php

标签: php smarty declaration


【解决方案1】:

您正在使用 smarty,看起来您正在使用 PHP 4 的类变量表示法:

var

它的 PHP 5 表示是:

public

但是您不需要更改代码,因为 PHP 是向后兼容的。保持原样以提醒您事情会发生变化,对于您自己的代码,您不会使用var

如果您真的需要更改代码,因为它中断(而不是您因为要更改代码而中断代码),您会及早注意到。

【讨论】:

    【解决方案2】:

    这就是 PHP 类属性的语法的工作原理。

    您使用美元符号定义属性,例如

    public $publicProperty;
    protected $protectedProperty;
    private $privatePropertyKeepOutLulz;
    

    从类实例(即对象)引用它们时,省略美元符号,例如

    $obj->publicProperty;
    $this->protectedProperty;
    $this->privatePropertyKeepOutLulz;
    

    更新

    使用 static 关键字声明静态属性

    public static $publicStaticProperty;
    private static $privateStaticProperty;
    

    然后你像这样引用它们

    // From outside the class (only applies to public properties)
    ClassName::$publicStaticProperty;
    
    // From within the class
    self::$privateStaticProperty;
    
    // From a descendant class (public or protected only)
    parent::$property;
    

    【讨论】:

    • 如果我使用 $publicProperty; 可能仍然无法工作;然后它引用 publicProperty 的其他地方会抛出错误,但没关系我将使用其他方法而无需弄乱这个类
    • @Poemm 我不知道你在说什么。请看Jared's answer
    【解决方案3】:

    在 PHP 中,变量以美元符号为前缀,即编程语言的sigil。这是计算中的一个重要概念,也是 PHP 能够识别变量的唯一方法。

    来自wikipedia(从不说谎):

    在很大程度上受 Perl 启发的 PHP 语言中,“$”位于前面 任何变量名。不以此为前缀的名称被视为常量 或函数。

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2011-10-16
      • 2012-06-04
      • 1970-01-01
      • 2012-10-31
      相关资源
      最近更新 更多