PHP OOP强制子类查看父类属性

时间:2014-12-07 13:10:52

标签: php oop

我正在尝试在父类中使用子类属性但我无法得到结果。我在子类中使用构造函数。也许有人可以解释一下,我该怎么做?我将在下面留下一些注释代码。谢谢!

Class DataBase extends Main {

    public $email, $password1, $password2;

    function __construct($email,$password1,$password2) { //this is my child class with properties

        $this->email = mysql_real_escape_string($email);
        $this->password1 = mysql_real_escape_string($password1);
        $this->password2 = mysql_real_escape_string($password2);

    }
}

Class Main{} //this is my parent class. I want to use DataBase class properties here.

已编辑最后一个问题是错的。

3 个答案:

答案 0 :(得分:0)

您应该能够轻松访问这些变量,因为它们具有访问修饰符“public”,这意味着它们可以全局访问。 e.g。

<?php

$dbc = new Main( 'val1', 'val2', 'val3' );

echo $dbc->email, ' ', $dbc->password1, ' ', $dbc->password2, PHP_EOL;

此代码段可以正常使用

编辑:我还想补充说,使用mysql_real_escape_string函数需要一个活动的MySQL连接或可用的MySQL资源。

答案 1 :(得分:0)

如果将属性设置为public,则应该能够访问父类中的子属性,因为始终使用PHP中的实际对象。但是,在OOP中这是一件非常糟糕的事情。如果您有另一个子类,则可能没有这些属性。这是一个纯粹的OOP反模式。

修改

执行$obj_suc = new Main($input_email, $input_password1, $input_password2);时,您实例化了课程Main。生成的对象$obj_suc对类DataBase一无所知。绝对没有。如果要实例化类DataBase,则必须执行$obj_suc = new DataBase($input_email, $input_password1, $input_password2);

如果您希望我们帮助您进行重构,我们需要更多来自MainDataBase的代码(例如,使用子属性的1方法)。我们还需要您执行$obj_suc = new Main($input_email, $input_password1, $input_password2);的代码。

答案 2 :(得分:0)

你应该将你的代码重构为更像这样的东西:

<?php
   class Foo {
      public $var1, $var2;

      public function __construct($v1, $v2) {
         $this->var1 = $v1;
         $this->var2 = $v2;
      }
   }

   class Main {
      private $foo = null;
      public function __construct(Foo f$) {
         $this->foo = $f;
      }
      public function getChildMembers() {
         if ($this->foo == null) return;
         return array($this->foo->var1, $this->foo->var2);
      }
   }

   $foo = new Foo('Bar', 'FooBar');
   $main = new Main($foo);
   var_dump($main->getChildMembers());