24

私はモデルを持っています

BaseUser.class.php
User.class.php
UserTable.class.php

ユーザークラス では、削除機能をオーバーライドしています

class User extends BaseUser {
   function delete(){
    }
}

さて、親の削除関数を呼び出したい場合....どのように?

$user = new User();
$user->delete();  // will call the overridden delete
$user-> ??  ;     // want to call parent delete
4

6 に答える 6

46

技術的には、正当な理由により、これを「外部」(パブリック インターフェイス) から行うことはできません。

理由を理解していて (または以下をお読みください)、実際に何をしているのかを知っている場合、実際に機能を提供しない理由はありません:

class User extends BaseUser {
   ... 
   function parentDelete(){
       parent::delete();
   }
   ...
}

user = new User();
$user->delete();  // will call the overridden delete
$user->parentDelete();     // want to call parent delete

ただし、これを行う場合は、何らかの形で継承を誤用していることを知っておく必要があります。これは例外的な状況に違いありません。実際にそれを行う必要がある状況はまったく想像できません。

そのため、なぜその機能が必要なのかを定式化して、より良い提案ができるようにしてください。

なぜそれが悪いのですか?

$user非常に単純な理由から: ソフトウェアでは、 に親があるかどうかを知る必要はありません。これは、まったく気にする必要のない詳細です。

これにより、ソフトウェアにあるユーザーオブジェクトを後でユーザーの子オブジェクトに置き換えることができます。これは、時間の経過とともにソフトウェアを変更したい場合に重要です。

パブリック インターフェイスの内部の詳細部分を作成すると、柔軟性を維持する可能性が失われます。柔軟性がないというのは、本当に悪い状況です。

于 2012-08-06T12:55:32.227 に答える
7

たぶんこれを試してください

parent::delete();
于 2012-08-06T12:42:15.890 に答える
4

PHPの親関数を探していると思います:

<?php
class A {
    function example() {
    echo "I am A::example() and provide basic functionality.<br />\n";
    }
}

class B extends A {
    function example() {
    echo "I am B::example() and provide additional functionality.<br />\n";
    parent::example();
    }
}

$b = new B;

// This will call B::example(), which will in turn call A::example().
$b->example();
?>

クラスに getMyFunction() という関数がない場合、呼び出す$b->getMyFuction()と親関数が呼び出されます。その場合、子関数が prent 関数を呼び出さない限り、子関数を呼び出します。

于 2012-08-06T12:42:19.063 に答える
3

保護者に一度電話する必要があるのに、なぜ延長するdelete必要があるのですか?

カスタム削除を作成してみませんか?

お気に入り:

public function customDelete()
{
  parent::delete();

  // do extends delete here
}

次に、を使用してオブジェクトを削除できます。また、メソッド->customDelete()をオーバーライドしていないため、親から delete メソッドを呼び出すこともできます。delete()

$user = new User();
$user->customDelete();  // will call the overridden delete
$user->delete(); // will call the parent (since you didn't override it)

また、本当に関数をオーバーライドする必要があるdelete()場合でも、一種の親削除を作成できます。

public function parentDelete()
{
  return parent::delete();
}

それで:

$user = new User();
$user->delete();  // will call the overridden delete
$user->parentDelete(); // will call the method that only call the parent
于 2012-08-06T12:56:38.740 に答える
1

このスレッドはcodingforumsで見つかりました。それが言っていること(そして私はそれらに同意する傾向があります)は、子クラスにオーバーライドされた関数/メソッドがある場合、そのオブジェクトのインスタンスは常に子メソッドを呼び出すということです。

キーワードはまたはparentに類似しており、クラス自体からのみ呼び出すことができます。$thisself

子オブジェクトが親メソッドを呼び出せるようにする場合は、別のメソッドを作成するだけです。

function parentExample() { 
    parent::example(); 
}

親メソッドのみを呼び出します。

于 2012-08-06T12:59:39.447 に答える