Call child method from parent class

class, php

Solution

You can do this by just simply calling the child method, e.g.:

if($_POST['condition'] === 'A') :
    $this->some_parent_function();
    $this->child_1_action();

However, you should avoid doing this. Putting checks in the parent that call methods only existing in a child class is a very bad design smell. There is always a way to do things in a more structured manner by utilizing well-known design patterns or simply thinking the class hierarchy through better.

A very simple solution you can consider is implementing all of these methods in the parent class as no-ops; each child class can override (and provide implementation for) the method that it's interested in. This is a somewhat mechanical solution so there's no way to know if it's indeed the best approach in your case, but even so it's much better than cold-calling methods that technically are not guaranteed to exist.

Problem

I have a Class that is used as an extender by several other Classes, and in one instance, a method from the parent Class needs to call back to a method from the child Class. Is there a way of doing this? I realise PHP contains `abstract` Classes and functions, but would require each child Class to have the declared `abstract` function(s), which I do not require in this case. For example (these are examples, not real life) - ``` Class parent{ function on_save_changes(){ some_parent_function(); if($_POST['condition'] === 'A') : // Call 'child_1_action()' elseif($_POST['condition'] === 'B') : // Call 'child_2_action()' endif some_other_parent_function(); } function some_parent_function(){ // Do something here, required by multiple child Classes } } Class child_1 Extends parent{ function __construct(){ $this->on_save_changes(); } function child_1_action(){ // Do something here, only every required by this child Class } } Class child_2 Extends parent{ function __construct(){ $this->on_save_changes(); } function child_2_action(){ // Do something here, only every required by this child Class } } ```

Original source

Related problems