【问题标题】:Accessing parent methods and properties PHP访问父方法和属性 PHP
【发布时间】:2012-11-27 04:42:10
【问题描述】:

我在从我的 Deliveries 访问 Jobinfo 类时遇到问题。问题是我需要能够从我的子类中获取 getQty 的值,并且我还需要能够使用父类的属性获取 qty_ship 方法。我怎样才能做到这一点?它似乎不起作用并且对此感到非常困惑......我希望能够动态使用来自 Parent->Child 和 Child->Parent 的方法。

class jobInfo
{
    public $JOB_ID;
    private $deliveries; // DELIVERIES CLASS

    function __construct($job_id)
    {

        $this->JOB_ID=$job_id;
        $this->deliveries = new Deliveries();

    }
    public function getQty()
    {
         return $this->query_s('job_sheet','*', 'job_id',$this->JOB_ID, 1, 'qty');
         //returns a quantity from query method
    }

}


class Deliveries  extends jobInfo
{

    function __construct(){}

    public function qty_ship()
    {
        $qty = 0;
        $SQL = mysql_query("SELECT * FROM deliveries WHERE jID='".parent::JOB_ID."'") or die(mysql_error());

        $rows = mysql_num_rows($SQL);
        if($rows>0)
        {
            while($data = mysql_fetch_array($SQL))
            {
                $qty += $data['qty_shipped'];
            }
        }
        return $qty;
     }

     public function getTotalBO()
     {
         $qty =  parent::getQty();
         $totalship =  $this->qty_ship();

         $x = $qty-$totalship;
         return $x; 
     }
 }

$A = new Jobinfo(15);

【问题讨论】:

  • 不确定您是否已经搜索过,但这已经被问过很多次了。 Take a look at this answer.
  • 嗯,它确实看起来像那样。基本上我想做的是能够使用父类中的一些内容,并让父类使用子类中的一些内容。但我似乎无法得到它......

标签: php oop


【解决方案1】:

您需要$this->getQty()$this->JOB_ID,但为了完整起见,请考虑:

  1. 删除空的无参数构造函数,因为它实际上不能用于实例化类,除非它调用具有作业 ID 的父构造函数,因为您希望作业 ID 在外部定义,所以它不能这样做。

  2. 制作 JOB_ID protected。为了更好地封装,您可以改为使用 private 并提供 getJobId() 方法。

  3. 处理一致的类命名 - jobInfo 以小写开头,Deliveries 以大写开头。

  4. 致力于一致的函数命名 - 您将下划线分隔的函数与驼峰式函数混合在一起。

  5. 处理一致的间距 - 您在整个过程中混合 1 个字符、2 个字符和 0 个字符的间距,没有太多押韵或理由。

欢迎来到 OOP,祝你好运!

【讨论】:

  • 感谢您的帖子。从这一点开始,我有一个想法。在 C# 中处理项目与在 PHP 中处理项目是不同的……关于一致性,你是对的。很多这些方法都是从网站上的旧函数派生的,从没想过它会在一个类中使用。感谢您指出类名的命名。
【解决方案2】:

如果你从那个类扩展,那么你应该使用

$this->getQty();

$this 将返回当前对象,该对象已包含所有公共和受保护变量和方法的父对象。

你应该只在调用静态类时使用 ::

例如:

jobInfo::getQty();

您可能还想看看命名约定。

http://framework.zend.com/manual/1.12/en/coding-standard.naming-conventions.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2023-03-25
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多