在定義函式時,於函式名前加上的&

edited 十月 2013 in PHP新手區
請教大家,
由於剛踏入php領域有些不大確定的觀念想請教一下:

關於 代碼:
$p = new parent("a");
->把物件的副本給$p.....對嗎?


關於 代碼:
$p =& new parent("a");
->把參照到物件的指標給$p.....對嗎?

-> 在自定義函式時的運算子&的功用是作什麼的?(不好意思,因為手冊上的例子看不太懂)
ex:
function &myFunc(){..}
...通常是什麼情況下要在定義函式時用上 & operator ?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=34

評論

  • edited 五月 2004
    關於 代碼:
    $p = new parent("a");
    ->把物件的副本給$p.....對嗎?
    建立一個新物件"parent",將"a"當作物件第一個參數的值,而這個物件存在變數$p
    關於 代碼:
    $p =& new parent("a");
    ->把參照到物件的指標給$p.....對嗎?
    ...有這樣的寫法ㄇ? :-o
    -> 在自定義函式時的運算子&的功用是作什麼的?(不好意思,因為手冊上的例子看不太懂)
    ex:
    function &myFunc(){..}
    ...通常是什麼情況下要在定義函式時用上 & operator ?
    & => 傳址呼叫(Call by Reference或Call by Address)
    可能要麻煩去翻翻資料結構的書,太過於細節的部份我也無法確定自己給的答案是否正確 :-D
  • edited 五月 2004
    感謝kiang的回應:

    不好意思,有些觀念我想再確認一下:

    [1].
    先定義函式:
    function &xoops_gethandler($name, $optional = false ) {
    ..............................
    省略其它statement
    ..............................
    return $handlers[$name];
    }

    再呼叫如下:
    $member_handler =& xoops_gethandler('member');

    -->
    是讓 $member_handler 能夠指向到 xoops_gethandler() 執行後的回傳值所在memory address嗎 ?

    -->
    若是,是否表示要如此用時
    必須先在定義函式時在其名稱前加上&運算子 ?




    =================================================================================

    [2].
    $myts =& MyTextsanitizer::getInstance();

    -->
    是讓 $myts 能夠指向到 MyTextsanitizer類別 的 getInstance()方法 ? ...(也就是讓 $myts 具有該 method 的能力)

    還是

    -->
    讓 $myts 能夠指向到 MyTextsanitizer::getInstance() 執行後的回傳值所在memory address ?


    以下簡單交代上方statement的原由:
    class MyTextSanitizer {

    function &getInstance() {

    static $instance;
    if (!isset($instance)) {
    $instance = new MyTextSanitizer();
    }
    return $instance;
    }
    ..............................
    省略其它statement
    ..............................
    }




    =====================================================================

    [3].
    至於這個語法:
    $p =& new parent("a");
    是我在http://php.us.themoes.org/manual/en/language.oop.php看到的,原文post如下:

    class parent
    {
    var $child;
    function parent($name)
    {
    $this->name = $name;
    $this->child =& new child($this);
    }
    }

    class child
    {
    var $parent;
    function child(&$parent)
    {
    $this->parent = &$parent;
    }
    }

    $p = new parent("a");
    $p->child->parent->name="b";
    echo "Name = $p->name\n"; // Prints "a"

    $p =& new parent("a");
    $p->child->parent->name="b";
    echo "Name = $p->name\n"; // Prints "b"

  • edited 五月 2004
    嗯,你真的把我考倒了,我自己撰寫程式並不會寫的這麼嚴謹,雖然這樣子執行速度或資源的運用有較大的優勢...

    [1].你會看到那些程式會不會是因為在物件中定義與執行的關係?所謂的必需在PHP中好像沒有這麼嚴謹,只是看你如何去運用吧~

    [2].應該是後者,因為它是傳址呼叫

    [3].看的頭好昏...我不是個習慣OOP的倫......
  • edited 五月 2004
    Anyway 感謝kiang肯鳥我
Sign In or Register to comment.