1. Go to this page and download the library: Download margusk/accessors 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/ */
margusk / accessors example snippets
class A
{
protected string $foo = "foo";
protected string $bar = "bar";
protected string $baz = "baz";
public function getFoo(): string
{
return $this->foo;
}
public function getBar(): string
{
return $this->bar;
}
public function getBaz(): string
{
return $this->baz;
}
}
$a = new A();
echo $a->getFoo(); // Outputs "foo"
echo $a->getBar(); // Outputs "bar"
echo $a->getBaz(); // Outputs "baz"
use margusk\Accessors\Attr\Get;
use margusk\Accessors\Accessible;
class A
{
use Accessible;
#[Get]
protected string $foo = "foo";
#[Get]
protected string $bar = "bar";
#[Get]
protected string $baz = "baz";
}
$a = new A();
echo $a->getFoo(); // Outputs "foo"
echo $a->getBar(); // Outputs "bar"
echo $a->getBaz(); // Outputs "baz"
use margusk\Accessors\Attr\Get;
use margusk\Accessors\Accessible;
#[Get]
class A
{
use Accessible;
protected string $foo = "foo";
protected string $bar = "bar";
protected string $baz = "baz";
}
use margusk\Accessors\Attr\Get;
use margusk\Accessors\Accessible;
#[Get]
class A
{
use Accessible;
protected string $foo = "foo";
protected string $bar = "bar";
#[Get(false)]
protected string $baz = "baz";
}
$a = new A();
echo $a->getFoo(); // Outputs "foo"
echo $a->getBar(); // Outputs "bar"
echo $a->getBaz(); // Results in Exception
use margusk\Accessors\Attr\{
Get, Set
};
use margusk\Accessors\Accessible;
#[Get,Set]
class A
{
use Accessible;
protected string $foo = "foo";
#[Get(false),Set(false)]
protected string $bar = "bar";
}
$a = new A();
echo $a->setFoo("new foo")->getFoo(); // Outputs "new foo"
$a->setBar("new bar"); // Results in Exception
use margusk\Accessors\Attr\Get;
use margusk\Accessors\Accessible;
#[Get]
class A
{
use Accessible;
public function __construct(
protected $a,
protected $b,
protected $c,
protected $d,
protected $e,
protected $f
)
{
}
}
// Configure object $foo
$foo = new A(1, 2, 3, 4, 5, 6);
// Create object $bar, which differs from $foo only by single value (property A::$f).
//
// To achieve this, we have to retrieve the rest of the values from object $foo and
// pass to constructor to create new object.
//
// This results in unnecessary complexity and unreadability.
$bar = new B($foo->a, $foo->b, $foo->c, $foo->d, $foo->e, 7);
use margusk\Accessors\Attr\{
Get, Set, Immutable
};
use margusk\Accessors\Accessible;
#[Get,Set,Immutable]
class A
{
use Accessible;
public function __construct(
protected $a,
protected $b,
protected $c,
protected $d,
protected $e,
protected $f
)
{
}
}
// Configure object $foo
$foo = new A(1, 2, 3, 4, 5, 6);
// Clone object $foo with having changed one property.
$bar = $foo->with('f', 7);
// Clone object $foo with having changed three properties.
$bar = $foo->with([
'a' => 11,
'b' => 12,
'f' => 7
]);
// Original object still stays intact
echo (int)($foo === $bar); // Outputs "0"
echo $foo->f; // Outputs "6"
echo $bar->f; // Outputs "7"
use margusk\Accessors\Attr\{
Get, Set
};
use margusk\Accessors\Accessible;
// Class A makes all it's properties readable/writable by default
#[Get(true),Set(true)]
class A
{
use Accessible;
protected string $foo = "foo";
}
// Class B inherits implicit #[Get(true)] from parent class but disables explicitly
// write access for all it's properties with #[Set(false)]
#[Set(false)]
class B extends A
{
protected string $bar = "bar";
// Make exception for $bar and disable it's read access explicitly
#[Get(false)]
protected string $baz = "baz";
}
$b = new B();
$b->foo = 'new foo'; // Works because $foo was defined by class A and that's where it gets it's
// write access
echo $b->foo; // Outputs "new foo"
echo $b->bar; // Outputs "bar"
$b->bar = "new bar"; // Results in Exception because class A disables write access by default for
// all it's properties
echo $b->baz; // Results in Exception because read access was specifically for $baz disabled
use margusk\Accessors\Attr\{
Get, Set
};
use margusk\Accessors\Accessible;
#[Get,Set]
class A
{
use Accessible;
protected string $foo = 'foo';
protected string $FOO = 'FOO';
}
$a = new A();
$a->setFoo('value'); // Case insensitive => $FOO is modified
$a->foo('value'); // Case insensitive => $FOO is modified
$a->Foo('value'); // Case insensitive => $FOO is modified
$a->set('foo', 'value'); // $foo is modified
echo $a->foo; // Outputs "foo"
echo $a->FOO; // Outputs "FOO"
echo $a->Foo; // Results in Exception because property $Foo doesn't exist
use margusk\Accessors\Accessible;
use margusk\Accessors\Attr\{Get, Set};
/**
* @property string $foo
* @property-read string $bar
*
* @method string getFoo()
* @method self setFoo(string $value)
* @method string getBar()
*/
class A
{
use Accessible;
#[Get,Set]
protected string $foo = "foo";
#[Get]
protected string $bar = "bar";
}
$a = new A();
echo $a->setFoo('foo is updated')->foo; // Outputs "foo is updated"
echo $a->bar; // Outputs "bar"
use margusk\Accessors\Attr\{
Get, Delete
};
use margusk\Accessors\Accessible;
#[Get]
class A
{
use Accessible;
#[Delete]
protected string $foo;
protected string $bar;
}
$a = new A();
$a->unsetFoo(); // Ok.
unset($a->foo); // Ok.
unset($a->bar); // Results in Exception
use margusk\Accessors\Attr\{
Get, Set, Mutator
};
use margusk\Accessors\Accessible;
#[Get]
class A
{
use Accessible;
#[Set,Mutator("htmlspecialchars")]
protected string $foo;
}
$a = (new A());
$a->setFoo('<>');
echo $a->getFoo(); // Outputs "<>"
use margusk\Accessors\Attr\{
Get, Set
};
use margusk\Accessors\Accessible;
#[Get,Set]
class A
{
use Accessible;
protected int $foo = 0;
public function getFoo(): int
{
return $this->foo + 1;
}
public function setFoo(int $value): void
{
$this->foo = $value & 0xFF;
}
}
$a = new A();
$a->foo = 1023;
echo $a->foo; // Outputs "256" instead of "1023"
echo $a->getFoo(); // Outputs "256" instead of "1023"
use margusk\Accessors\Attr\{
Get, Set, Format
};
use margusk\Accessors\Format\Method;
use margusk\Accessors\Format\Standard;
use margusk\Accessors\Accessible;
class SnakeCaseFmt extends Standard
{
public function matchCalled(string $method): ?Method
{
if (
preg_match(
'/^(' . implode('|', Method::TYPES) . ')_(.*)/i',
strtolower($method),
$matches
)
) {
$methodName = $matches[1];
$propertyName = $matches[2];
return new Method(
Method::TYPES[$methodName],
$propertyName
);
}
return null;
}
}
#[Get,Set,Format(SnakeCaseFmt::class)]
class A
{
use Accessible;
protected string $foo = "foo";
}
$a = new A();
echo $a->set_foo("new foo")->get_foo(); // Outputs "new foo"
echo $a->setFoo("new foo"); // Results in Exception
use margusk\Accessors\Accessible\WithPHPDocs as AccessibleWithPHPDocs;
/**
* @property string $foo
* @property-read string $bar
*/
class A
{
use AccessibleWithPHPDocs;
protected string $foo = "foo";
protected string $bar = "bar";
}
$a = new A();
echo $a->setFoo("new foo")->getFoo(); // Outputs "new foo"
echo $a->bar; // Outputs "bar"
$a->setBar("new bar"); // Results in Exception
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.