【问题标题】:php special notations [duplicate]php特殊符号[重复]
【发布时间】:2012-11-12 09:28:37
【问题描述】:

可能重复:
Reference - What does this symbol mean in PHP?

我正在使用this tutorial学习PHP MVC。在那里我发现了以下特殊符号 用于对象初始化

$this->$model =& new $model;

我知道 & 用于在 HTML 中表示 & 符号。这里是什么意思?下面给出了符号所在的类。还有那个教程呢?它是一个好的吗?如果没有,有人可以推荐我一个更好的吗?

<?php
class Controller {

    protected $_model;
    protected $_controller;
    protected $_action;
    protected $_template;

    function __construct($model, $controller, $action) {

        $this->_controller = $controller;
        $this->_action = $action;
        $this->_model = $model;

        $this->$model =&amp; new $model;
        $this->_template =&amp; new Template($controller,$action);

    }

    function set($name,$value) {
        $this->_template->set($name,$value);
    }

    function __destruct() {
            $this->_template->render();
    }

}

【问题讨论】:

  • 在我看来这不是有效的 PHP。运行时是否会产生任何错误或警告?
  • 请找到更好的教程。 $variable =&amp; new Something 是 PHP 4 的遗留物,在 PHP 5 中不需要。mysql_* 函数已弃用,不应在新代码中使用。 register_globalsmagic_quotes_gpc 之类的东西也是如此。
  • 你能给我推荐一个好的教程吗?
  • 由于您正在按照教程编写自己的 MVC 框架,因此我假设您对 PHP 有基本的了解。如果我的假设没有错的话,我建议你通过现有的 MVC 框架的源码来学习。一些很好的例子是Fuel PHPSlim PHP
  • 停止!那篇文章严重过时了! (超过 3 年前!)Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.

标签: php reference variable-assignment


【解决方案1】:

&amp;amp; translates to &amp; 所以它是通过引用分配的。 (由 DCoders 评论)。
你所看到的实际上应该是:

$this->$model =& new $model;

And =& in php relates to passing something by reference.

虽然有些人会争辩说在 PHP5 上不需要它(我同意)它并不完全相同并且知道它可能会有所帮助...

(来自手册)

经常提到的 PHP 5 OOP 的一个关键点是 “对象默认通过引用传递”。这并不完全 真的。

This section rectifies that general thought using some examples.

【讨论】:

  • 不是通过引用传递函数,而不是对象吗?
  • @PRPGFerret,手册对此有一些解释php.net/manual/en/language.oop5.references.php
  • 这是assignment by reference,而不是通过引用传递
  • @xbonez:在 PHP 5 中不需要这样做,但在 PHP 4 中是必需的。
  • 我的措辞可能不正确。没有必要在新构造的对象上使用引用分配($a = new foo() 可以),但是在其他上下文中引用分配有明显的正当理由。事实上,PHP 5 中的 $a =&amp; new foo() 会产生错误,E_STRICTE_DEPRECATED 取决于次要版本。
【解决方案2】:

&amp; 在此上下文中用于通过引用分配的对象,但不推荐使用。 在 PHP 5 中,对象被默认分配为引用,所以这里不需要使用它。

【讨论】:

    【解决方案3】:

    在 PHP 中

    $a = &$b
    

    表示通过引用传递值。 在 PHP 5 的版本中,所有对象都默认通过引用传递。所以你可以跳过 & 符号

    $a = new b();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-06
      • 2020-11-19
      • 2020-05-06
      • 2013-03-22
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多