Server IP : 192.158.238.246 / Your IP : 18.191.73.161 Web Server : LiteSpeed System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64 User : jenniferflocom ( 1321) PHP Version : 8.1.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/7779/task/7779/cwd/plugins/give/src/Framework/Support/Facades/ |
Upload File : |
<?php namespace Give\Framework\Support\Facades; /** * Class Facade * * This class provides a way of taking a normal instance class and creating a static facade out of it. It does it in * such a way, though, that the facade is still mockable. It does this by instantiating the decorated class through the * Give Service Container (SC). So by injecting a mock singleton of the decorated class in the SC, it can be mocked. * * To use this, simply make a new facade class which extends this once, then implement the getFacadeClass and return the * class to be decorated, for example: return MyClass::class; * * To help the IDE, take the methods from the decorated class and add them your class docblock. So if Repository had an * insert method, you would add "@method static Model insert()" to the top. * * @since 2.12.0 */ abstract class Facade { /** * Static helper for calling the facade methods * * @since 2.12.0 * * @param string $name * @param array $arguments * * @return mixed */ public static function __callStatic($name, $arguments) { // Make sure the static class is a singleton and get instance give()->singletonIf(static::class); $staticInstance = give(static::class); // Make sure the accessed class is a singleton and get instance $accessorClass = $staticInstance->getFacadeAccessor(); give()->singletonIf($accessorClass); $accessorInstance = give($accessorClass); return $accessorInstance->$name(...$arguments); } /** * Retrieves the fully qualified class name or alias for the class being decorated * * @since 2.12.0 * * @return string */ abstract protected function getFacadeAccessor(); }