我正在使用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
答案 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)
我在这看到一些困惑:
Page
班级继承自User
。这意味着页面本身具有User
类的所有属性,实际上可以用来代替User
类。由于print_username()方法是在代码中编写的,因此它不起作用 - 因为它没有对$user
变量的引用。您可以将$user
更改为$this
以获取print_username()
方法中的用户名,并从父类(User
)借用以获取用户名属性。extends User
。这将使页面成为页面,用户成为用户。Page
的{{1}}方法,然后您可以在__construct()
中引用该值。使用extends编写代码的第一种方法涉及继承。在将用户作为参数传递时编写代码的第二种方法涉及组合。在这种情况下,有两个独立的想法(页面和用户),我会使用组合来共享和访问对象属性而不是继承。
我会这样做:
Page