1. Go to this page and download the library: Download neunerlei/lockpick library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
neunerlei / lockpick example snippets
use Neunerlei\Lockpick\Util\ClassLockpick;
class LockedClass {
private static int $staticProperty = 0;
private int $property = 1;
private function foo(string $name): string{
return sprintf('hello %s', $name);
}
private static function staticFoo(): string {
return 'I am static!';
}
}
$i = new LockedClass();
// Create a lock-pick instance for the class
$lp = new ClassLockpick($i);
// Check if the property exists
if($lp->hasProperty('property')){
// Use one of the utility methods
echo $lp->getPropertyValue('property'); // 1
// You can set the value in the same way
$lp->setPropertyValue('property', 3);
// Alternatively you can use the "magic" approach
echo $lp->property; // 3
$lp->property = 5;
echo $lp->property; // 5
}
// You can do the same for methods
if($lp->hasMethod('foo')){
// You can also run parameters in it
echo $lp->runMethod('foo', ['bar']); // 'hello bar'
// You can also apply a bit of sugar here
echo $lp->foo('bar'); // 'hello bar'
}
// Of course, this also works for statics
if(ClassLockpick::hasStaticProperty(LockedClass::class, 'staticProperty')){
echo ClassLockpick::getStaticPropertyValue(LockedClass::class, 'staticProperty'); // 0;
ClassLockpick::setStaticPropertyValue(LockedClass::class, 'staticProperty' 2);
echo ClassLockpick::getStaticPropertyValue(LockedClass::class, 'staticProperty'); // 2;
}
// This will work for methods as well
if(ClassLockpick::hasStaticMethod(LockedClass::class, 'staticFoo')){
echo ClassLockpick::runStaticMethod(LockedClass::class, 'staticFoo'); // 'I am static'
}
class SomeClass {
protected int $property = 1;
protected function method(): string{
return 'hello';
}
}
class SomeClassAdapter extends SomeClass {
public static function getInstanceProperty(SomeClass $instance): int {
return $instance->property;
}
public static function runInstanceMethod(SomeClass $instance): string {
return $instance->method();
}
}
$i = new SomeClass();
echo SomeClassAdapter::getInstanceProperty($i); // 1
echo SomeClassAdapter::runInstanceMethod($i); // 'hello'
use Neunerlei\Lockpick\Override\ClassOverrider;
// First you need to register the class overrider for your application
ClassOverrider::init(
// You need to provide an autoloader, which can be either done completely manually,
// or using the "makeAutoLoaderByStoragePath" factory.
ClassOverrider::makeAutoLoaderByStoragePath(
// The first parameter is the absolute path to the directory where we can put some PRIVATE PHP FILEs
// This directory MUST be writable by the webserver, but MUST NEVER be readable to the outside world!
__DIR__.'/var/classOverrides',
// The second parameter is the composer autoloader, which you can acquire by "requiring" the
// autoload.php file from the vendor directory. There is no harm in doing this multiple times,
// so it will work fine, even if composer was already loaded earlier.
namespace ForeignVendor\ForeignNamespace;
final class TargetClass {
public function foo(){
// Returns interesting stuff
return 'foo';
}
private function privateBar() {
// Does fancy stuff
}
}
namespace YourVendor\YourNamespace;
use ForeignVendor\ForeignNamespace\LockpickClassOverrideTargetClass;
class ExtendedTargetClass extends LockpickClassOverrideTargetClass {
public function foo(?bool $useExtension = null){
// Use private members of the parent without problems
$this->privateBar();
// You can implement your own features
if($useExtension !== false){
return 'bar';
}
// Or can call the parent implementation without problems
return parent::foo();
}
}
use Neunerlei\Lockpick\Override\ClassOverrider;
use ForeignVendor\ForeignNamespace\TargetClass;
use YourVendor\YourNamespace\ExtendedTargetClass;
ClassOverrider::registerOverride(TargetClass::class, ExtendedTargetClass::class);
use ForeignVendor\ForeignNamespace\TargetClass;
$i = new TargetClass();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.