2014-01-30 60 views
-2

這是我的PHP頁面persona.phpPHP的面向對象,函數調用

<?php 
class persona { 
private $name; 
public function __construct($n){ 
    $this->name=$n; 
} 
public function getName(){ 
    return $this->name; 
} 

public function changeName($utente1,$utente2){ 
    $temp=$utente1->name; 
    $utente1->name=$utente2->name; 
    $utente2->name=$temp; 

    } 
} 
?> 

persona很簡單,只是表明,改變兩個用戶名如果​​調用構造函數和函數。

這是的index.php

<?php 
require_once "persona.php" ; 
    $utente1 = new persona("Marcello"); 
    print "First user: <b>". $utente1->getName()."</b><br><br>"; 
    $utente2 = new persona("Sofia"); 
    print "Second user: <b>". $utente2->getName()."</b><br>"; 
    changename($utente1,$utente2); 
    print " Test after name changes: first user". $utente1->getName()."</b> second user". $utente2->getName(); 
?> 

我不明白的是如何從這裏調用changeName功能。

+2

所以,你知道如何調用'getName'但不能打電話'changeName()'? – zerkms

+1

$ utente1-> changename($ utente1,$ utente2); – Ant

回答

2

我可以理解哪裏出現混淆...我認爲您不確定是否應該致電$utente1$utente2上的changename。從技術上講,你可以從任一對象調用它,因爲他們是Persona

但爲了清晰和理智這兩種情況下,我會建議在其聲明中的changeName功能轉換爲static function

public static function changeName($utente1,$utente2){

然後在您的index.php,你可以稱其爲:

Persona::changename($utente1,$utente2);

從n體系結構戳記點,這將有助於更好地理解該函數與Persona類綁定,並且對象可以使用該類函數更改交換名稱,而不是使其成爲實例函數,然後讓任何對象執行它。

0

你的具體情況,你可以稱其爲:

$utente1->changename($utente1,$utente2); 
or 
$utente2->changename($utente1,$utente2); 

這並不重要。由於該方法本身不適用於類屬性(但僅適用於方法參數),因此可以從存在的任何對象調用該方法。

不過還好(最佳實踐,並通過設計更好)是建立一個靜態方法,如Raidenace已經說了,並把它想:

Persona::changename($utente1,$utente2); 
+0

Thx非常感謝你們兩位:)我很抱歉,如果這個問題似乎是一個愚蠢的問題,但即使我很擅長PHP編程和Java它是我第一次嘗試接近PHP OO。再次感謝你! – smart548