2013-05-06 72 views
0

我对PHP很新,我想了解工作类,方法和属性。 我有一个问题,我想得到解决,我不明白。我无法找到一个合适的解决方案(我也喜欢)。从一个方法获取并回显多个字符串

之前,我问我的问题,这里有我的类/代码:

主类用户(user.class.php)

class User { 

    // Properties 
    protected $_name; 
    public $surname; 

    // Methods 
    public function setName($name) { 
     $this->_name = $name; 
    } 

    public function getName() { 
     return $this->_name; 
    } 

    public function setSurname($surname) { 
     $this->surname = $surname; 
    } 

    public function getSurname() { 
     return $this->surname; 
    } 

} 

儿童类* Premium_User *(p​​remiumUser_child_user。 class.php)

class Premium_User extends User { 
    private $_premiumId; 

    public function setData($name, $id) { 
     $this->name = $name; 
     $this->_premiumId = $id; 
    } 

    public function getData() { 
     return array(
     'name' => $this->name, 
     'id' => $this->_premiumId 
     ); 

    } 
} 

代码:

// Class User:: 

include('user.class.php'); 

// Child class -> class::User 

include('premiumUser_child_user.class.php'); 

$user = new Premium_User(); 
$user->setData('P','1'); 
$user->setData('H','2'); 
$user->setData('P','3'); 

$getUserData = $user->getData(); 

while ($i <= $getUserData['id']) { 
    echo "User: " . $getUserData['name'] . " ID: " . $getUserData['id'] . ".\n"; <br> 
    $i++; 
} 

输出:

User: P ID: 3. 
User: P ID: 3. 
User: P ID: 3. 

我希望得到什么,它是:

User: P ID: 1. 
User: H ID: 2. 
User: P ID: 3. 

我试图用* array_push *新增的每个进入数组,但没有工作。

+0

'类Premium_User扩展用户{
'很奇怪的地方了''
? – Aquillo 2013-05-06 20:19:15

+0

你想拥有3个不同的用户,对吧? – phant0m 2013-05-06 20:19:35

+0

如果您将每个用户放入一个数组中,它将会。 – 2013-05-06 20:21:24

回答

2

您只能创建一个单独的用户而不是三个独立的用户。如果你想有三个用户,创建三个使用new三次。

您在同一个对象上拨打setData()三次。

public function setData($name, $id) { 
    $this->name = $name; 
    $this->_premiumId = $id; 
} 

按照这一定义,你覆盖从以前的调用该方法setData的变化。我曾评论说,有没有影响你行:

$user = new Premium_User(); 
// $user->setData('P','1'); 
// $user->setData('H','2'); 
$user->setData('P','3'); 

要通过一个单一的变量有多个用户访问,你可以把你的用户到一个数组:

$user1 = new Premium_User(); 
$user1->setData('P','1'); 
$user2 = new Premium_User(); 
$user2->setData('H','2'); 
$user3 = new Premium_User(); 
$user3->setData('P','3'); 

为使用PHP 5.4及更高版本:

$users = [$user1, $user2, $user3]; 
foreach($users as $user) { 
    echo "User: " . $user->getData()['name'] . " ID: " . $user->getData()['id'] . ".\n"; 
} 

PHP 5.4之前:

$users = array($user1, $user2, $user3); 
foreach($users as $user) { 
    $userData = $user->getData(); 
    echo "User: " . $userData['name'] . " ID: " . $userData['id'] . ".\n"; 
} 
+0

我试过你的解决方案,但它给我一个$ users = [$ user1,$ user2,$ user3]的错误; - PHP解析错误:语法错误,意外的'['。没有大括号或作为一个字符串不起作用。 – Bilzard 2013-05-06 20:38:51

+0

@Byrzard此语法仅适用于PHP 5.4及更高版本。我用另一种语法更新了我的答案。 – phant0m 2013-05-06 20:47:50

+0

两者都很完美。谢谢! – Bilzard 2013-05-07 06:13:46

0

该类只会记住您上次设置数据的时间。要么实例化多个用户,要么一次只设置一个用户,并一次输出一个。

$user = new Premium_User(); 
$user->setData('P','1'); 

$user2 = new Premium_User(); 
$user2->setData('H','2'); 

$user3 = new Premium_User(); 
$user3->setData('P','3'); 

仅供参考<br>标签直到您使用回声才需要。

或使用:

$user = new Premium_User(); 
$user->setData('P','1'); 
//do something with this user data 
$user->setData('H','2'); 
//do something with second user data 
//etc. 
相关问题