PHP常量引用

时间:2011-01-22 04:00:00

标签: php constants

我是一名中级C ++程序员,并且知道您可以将常量引用作为参数传递,以防止编辑实际变量。我想知道我是否可以用PHP做到这一点?

3 个答案:

答案 0 :(得分:5)

不,PHP中没有C ++的const限定符。

答案 1 :(得分:1)

这就是你所说的:

<?php
    $a = 10;
    function foo($p_a) {
        // passing by value is the default
        $p_a++;
    }
    foo($a);
    echo $a; // prints 10

    $a = 10;
    function bar(&$p_a) {
        //-------^ passing by reference
        $p_a++;
    }
    bar($a);
    echo $a; // prints 11
?>

答案 2 :(得分:0)

@Salman A,仅适用于标量,当对象通过引用传递时,行为是不同的。看起来两种方法之间没有真正的区别!

<?php

class X
{
    static $instances = 0;

    public $instance;
    public $str;

    function __construct($str)
    {
        $this->instance = ++self::$instances;
        $this->str = $str;
    }

    public function __toString()
    {
        return "instance: ".$this->instance." str: ".$this->str;
    }
}

class Y extends X
{
    public function __toString()
    {
        return "Y:".parent::__toString();
    }
}

// Pass NORMAL
function modify_1($o)
{
    $o->str = __FUNCTION__;
}

// Pass BY-REFERENCE
function modify_2(&$o)
{
    $o->str = __FUNCTION__;
}

// Pass NORMAL - Obj Replace
function modify_3($o)
{
    $o = new Y(__FUNCTION__);
}

// Pass BY-REFERENCE - Obj Replace
function modify_4(&$o)
{
    $o = new Y(__FUNCTION__);
}

$x = new X('main');
echo "$x\n";

modify_1($x);
echo "$x\n";

modify_2($x);
echo "$x\n";

modify_3($x);
echo "$x\n";

modify_4($x);
echo "$x\n";

生成以下输出;

instance: 1 str: main
instance: 1 str: modify_1
instance: 1 str: modify_2
instance: 1 str: modify_2
Y:instance: 3 str: modify_4

期待

instance: 1 str: main
instance: 1 str: main
instance: 1 str: modify_2
instance: 1 str: modify_2
Y:instance: 3 str: modify_4

所以我的结论是;如果我们处理对象(本身)或标量,它似乎确实有效;但不是对象的属性或方法。