我有以下课程。我想要的是通过 construct()在主类( class1 )中定义一个变量,然后从其他类中调用那些扩展class1的变量。 / p>
的Class1 :
<?php
class Class1 {
protected $var1;
public function __construct( $var1 = '' ) {
if ( !empty($var1) ) $this->var1 = $var1;
}
public function get_var() {
return $this->var1;
}
}
的Class2 :
<?php
class Class2 extends Class1 {}
索引:
<?php
require 'class1.php';
$class1 = new Class1( 'test' );
echo 'Class1: ' . $class1->get_var();
require 'class2.php';
$class2 = new Class2();
echo '<br>Class2: ' . $class2->get_var();
这里的结果是第一个Echo显示正确的值(test),但第二个不显示,只是一个空字符串。
那么,有一种方法可以在没有定义构造中的变量的情况下执行此操作吗?
答案 0 :(得分:1)
你可以用static
做到这一点,所以你可以这样做:
<?php
class Class1 {
protected static $var1;
public function __construct( $var1 = '' ) {
if ( !empty($var1) ) self::$var1 = $var1;
}
public function get_var() {
return self::$var1;
}
}
class Class2 extends Class1 {}
$class1 = new Class1( 'test' );
echo 'Class1: ' . $class1->get_var();
$class2 = new Class2();
echo '<br>Class2: ' . $class2->get_var();
?>
答案 1 :(得分:-1)
仔细检查您的代码:Class2扩展了超类Class1。 Class1在其自己的构造函数中具有$ var1参数,该参数分配给状态变量$ var1(其访问权限设置为protected)。
当调用子类(在您的情况下为Class2)时,不会将任何内容传递给它自己的构造函数。此外,您没有在Class2代码中定义任何构造函数。你可以这样做:
class Class2 extends Class1 {
public function __construct($var1 = '') {
parent::__construct($var1);
}
}
这里发生了什么?您实际上覆盖了__construct方法。如果不使用parent :: __构造调用超类的方法__construct,则只会执行Class2定义的方法。 parent :: {method_name}将使您能够在重写方法中调用Class1构造方法(在这种情况下,您将扩展__construct功能)。
当您将实例化Class2时,将字符串传递给构造函数,并且状态变量$ var1将被赋值。请记住,扩展一个类,您继承了它的所有属性和方法。
答案 2 :(得分:-1)
这个例子很好用。
如果目的是使用class1实例化而class2具有那些属性。如果class2也需要一个新属性,可以使用不同的属性保留一个新的class1,如下所示:
<?php
class Class1 {
protected static $var1;
public function __construct( $var1 = '' ) {
if ( !empty($var1) ) self::$var1 = $var1;
}
public function get_var() {
return self::$var1;
}
}
class Class2 extends Class1 {}
$class1 = new Class1( 'test' );
echo 'Class1: ' . $class1->get_var() . "\n";
$class2 = new Class2();
echo 'Class2: ' . $class2->get_var() . "\n";
$class1 = new Class1( 'prod' );
echo 'Class1: ' . $class1->get_var() . "\n";
$class2 = new Class2();
echo 'Class2: ' . $class2->get_var() . "\n";
?>
输出:
Class1:test
Class2:test
Class1:prod
Class2:prod