基本的PHP OOPS查询

时间:2011-03-12 16:09:32

标签: php string oop

确定。我正在用PHP开始OOPS。创建了几个类:从父类继承的客户(父)和销售(子)类。创建了另一个testcustomer.php,其中创建了一个新的销售对象,但salesc()中定义的salesprint()函数不会回显客户的名称,尽管它在class.customer.php(parent)中设置为“Jane”。我的想法是,当销售类扩展客户类时,PHP自动包含从class.customer.php到sales.customer.php的所有代码,因此父类中的构造函数将$ name设置为“Jane”。

以下是代码: class.customer.php

   <?php

     class customer{

       private $name;
       private $cust_no;

     public function __construct($customerid) {

        $this->name = 'Jane';
        $this->cust_no = $customerid;

       }

    }
  ?>

class.sales.php

    <?php

        require_once('class.customer.php');
        class sales extends customer{

        public function salesprint($customerid) {
    echo "Hello $this->name this is a print of your purchased products";

        }

     }

   ?>

testcustomer.php 的        

      require_once('class.sales.php');
      $objsales = new sales(17);
      $objsales->salesprint(17);

      ?>

我得到的输出 您好,这是您购买的产品的打印件。

我做错了什么? 谢谢 罗梅什

6 个答案:

答案 0 :(得分:2)

除了将Customer类扩展到Sale之外的事实是没有意义的,它没有显示任何内容,因为名称成员private私有意味着在当前类之外不可用于他们的孩子,如果您想保护您的会员,但让他们可以使用您的扩展课程,则应使用protected关键字。

顺便说一句,在字符串中使用变量时,您应该concatenate

echo 'Hello ' . $this->name . ' this is a print of your purchased products';

或使用变量替换:

echo "Hello {$this->name} this is a print of your purchased products";

它更具可读性。

答案 1 :(得分:1)

因为$name字段声明为private,所以它不会继承到子类。将其更改为protected

另外,我建议您对$cust_no字段执行相同的操作。通过这样做,您将避免将$customerid作为参数传递给salesprint方法,因此您的最终代码将如下所示:

$objsales = new sales(17);
$objsales->salesprint();

答案 2 :(得分:1)

最好能阅读http://Confuseoops.blogspot.com。很多例子

什么时候有人试图学习OOPS?他们会通过关键字和设计模式来混淆他们自己

答案 3 :(得分:0)

$ name是私有的,这就是为什么你无法从子类销售中访问它。将其更改为protected将使$ name对子类可见,或将其公开以使其对任何类都可见。

答案 4 :(得分:0)

2个问题。您的超类具有私有变量,因此只有该类可以访问这些变量。使用受保护或公开。此字符串也是错误的,只要$ this属性访问器有效。

echo "Hello ".$this->name. " this is a print of your purchased products";

答案 5 :(得分:-1)

好的,谢谢所有。从私人到保护的改变为我解决了......因为一些人抱怨程序设计不正确但这只是为了测试我对PHP中的继承如何工作以及PHP如何包含父的理解在运行时期间将类的代码转换为子类代码。无意考虑应用程序的设计......但仍然需要牢记未来......回到未来&gt;&gt;&gt;