【问题标题】:Proper way to override function in php [duplicate]在php中覆盖函数的正确方法[重复]
【发布时间】:2012-10-17 00:39:16
【问题描述】:

可能重复:
How do I call PHP parent methods from within an inherited method?

我正在尝试通过以下方式覆盖 php 中的函数

主类

<?php    
class Curl{
   /* constructor */
   public function Curl(){}

   /* login */
   public function login($url, $post_fields){
      ...
   }
}
?>

子类

<?php
require_once("/var/www/api/curl/curl.php");

class Curl_B extends Curl{
   /* constructor */
   public function Curl_B(){}

   /* login */
   public function login(){
      $this->login(
        'https://xxx.co.uk/login.php', 
        'email=xxx&pass=xxx'
      );
   }
}

$curl = new Curl_B();
$curl->login();

?>

问题是,如果子类有同名的函数,我似乎无法正确调用父函数 login()。

我知道您不能拥有同名的函数,那么解决我的问题的最佳方法是什么?

【问题讨论】:

  • 顺便说一句,使用类名作为构造函数是php4时代的代码;你应该开始使用__construct() 声明。

标签: php oop


【解决方案1】:

以同名调用父类的函数:

class Curl_B extends Curl{
   /* constructor */
   public function Curl_B(){}

   /* login */
   public function login(){
      parent::login(
        'https://xxx.co.uk/login.php', 
        'email=xxx&pass=xxx'
      );
   }
}

【讨论】:

    【解决方案2】:

    Use Parent keyword Insted你应该改变:

    $this->login(
    

    parent::login(
    

    PHP DOC

    您应该使用特殊名称 parent,而不是在代码中使用基类的字面名称,它指的是类的扩展声明中给出的基类的名称。

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2016-02-04
      • 2011-06-11
      • 1970-01-01
      • 2016-10-19
      • 2023-04-10
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多