Skip to content

Instantly share code, notes, and snippets.

@Xplouder
Last active May 16, 2019 15:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xplouder/7ee720bebf536640d0f047acd120daf4 to your computer and use it in GitHub Desktop.
Save Xplouder/7ee720bebf536640d0f047acd120daf4 to your computer and use it in GitHub Desktop.
PHP - Rewrite dependencies classes

Class Alias

<?php

namespace Shop\Models;

use Shop\Models\Address as AddressClass;

/** @var Address parent */
class_alias(defined('AddressClass') ? AddressClass : Address::class, 'ThingPink\Shop\Models\AddressClass');

/**
 * Class BillingAddress
 *
 * @package Shop\Models
 */
class BillingAddress extends AddressClass
{
    ...
}
Pros
  • Can simply extend the class that we need to overwrite some function and point the alias to it (do not need rewrite the entire class)
Cons
  • Every file with this strategy lose IDE type hints from parent and eventually every type hints for classes with this strategy
  • Need to add this alias code to EVERY class in order to make em "replaceable"

Class overwrite

composer.json

...
  "autoload": {
    "psr-4": {
      "Shop\\Models\\": "./extended"
    }
  },
 ...

Where inside the ./extended folder exists the class(es) that you want to reimplement.

Pros
  • Do not need to change a thing in vendor classes in order to adapt extensibility
  • IDE automatically just read the "overwritten" version, meaning that we get out of the box all the IDE hints
Cons
  • Need to rewrite entire classes (instead just extend em and overwrite the desired changes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment