2

我在 PHP 中使用 OOP,我得到了以下代码:

索引.php:

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

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

$page->print_username();
?>

用户类.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

4

3 回答 3

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

于 2013-07-15T19:15:15.790 回答
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)
    }
}
于 2013-07-15T19:17:15.653 回答
1

我在这里看到一些混乱:

  1. 你已经让你的Page类继承自User. 这意味着页面本身具有User类的所有属性,实际上可以用来代替User类。由于 print_username() 方法是在您的代码中编写的,因此它不起作用 - 因为它没有对$user变量的引用。您可以更改$user$this以在print_username()方法中获取用户名,并从父类 ( ) 中借用User以获取用户名属性。
  2. 不过,我的想法是,您并不打算这样做。毕竟,页面不是用户 - 它们彼此不相关。所以我要做的是extends User从 Page 类中删除。这将使一个页面成为一个页面,一个用户成为一个用户。
  3. 但是页面将​​如何打印用户名?页面当然需要这样做。您可以做的是将 $user 对象作为参数传递给Page'__construct()方法,然后您可以在Page.

使用扩展编写代码的第一种方法涉及继承。将用户作为参数传入时编写代码的第二种方法涉及组合。在这种情况下,有两个不同的想法(页面和用户),我会使用组合来共享和访问对象属性,而不是继承。

我会这样做:

<?php
class User {

    public function __construct() {

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

class Page {

    private $user;

    public function __construct($user) {
        $this->user = $user;
    }

    public function print_username() {

        echo $user->username;
    }
}
$user = new User;
$page = new Page($user);

$page->print_username();

?>
于 2013-07-15T19:23:18.397 回答