从另一个类访问对象的属性

时间:2013-07-15 19:12:23

标签: php oop

我正在使用PHP中的OOP,我有以下代码:

的index.php:

<?php
include('user.class.php');
include('page.class.php');

$user = new User;
$page = new Page;

$page->print_username();
?>

user.class.php:

<?php
class User {

    public function __construct() {

        $this->username = "Anna";
    }
}
?>

page.class.php:

<?php
class Page extends User {

    public function __construct() {
    }

    public function print_username() {

        echo $user->username;
    }
}
?>

我的问题出现在print_username()函数的“Page”类中。

如何在此课程中访问$ user对象的属性?正如您所看到的,我在index.php中定义了两个对象。

提前致谢

/ C

3 个答案:

答案 0 :(得分:7)

class User {
    public $username = null;
    public function __construct() {
        $this->username = "Anna";
    }
}

class Page extends User {
    public function __construct() {
        // if you define a function present in the parent also (even __construct())
        // forward call to the parent (unless you have a VALID reason not to)
        parent::__construct();
    }
    public function print_username() {
        // use $this to access self and parent properties
        // only parent's public and protected ones are accessible
        echo $this->username;
    }
}

$page = new Page;
$page->print_username();

$user应为$this

答案 1 :(得分:2)

class User {
    public $username = null;
    public function __construct() {
        $this->username = "Anna";
    }
}

class Page extends User {
    public function print_username() {
        echo $this->username;  //get my name! ($this === me)
    }
}

答案 2 :(得分:1)

我在这看到一些困惑:

  1. 您已导致Page班级继承自User。这意味着页面本身具有User类的所有属性,实际上可以用来代替User类。由于print_username()方法是在代码中编写的,因此它不起作用 - 因为它没有对$user变量的引用。您可以将$user更改为$this以获取print_username()方法中的用户名,并从父类(User)借用以获取用户名属性。
  2. 我的想法是,你不打算这样做。毕竟,页面不是用户 - 它们彼此无关。所以我要做的就是从Page类中删除extends User。这将使页面成为页面,用户成为用户。
  3. 但是Page如何打印用户名?页面当然需要这样做。您可以做的是将$ user对象作为参数传递给Page的{​​{1}}方法,然后您可以在__construct()中引用该值。
  4. 使用extends编写代码的第一种方法涉及继承。在将用户作为参数传递时编写代码的第二种方法涉及组合。在这种情况下,有两个独立的想法(页面和用户),我会使用组合来共享和访问对象属性而不是继承。

    我会这样做:

    Page