- ucfirst: documentation ( source)
<?php
/*
Challenge 1: Modify Test::$secret before it's output.
Rules::
1. No use of Reflection API / runkit extension
2. No stopping execution before Test::run()
3. No Exceptions or PHP errors / warnings notices allowed
Hints:
1. Caesar
2. Magic methods
3. Requires a new feature of PHP 5.4
*/
class Test
{
private $secret = 'Nyy lbhe Onfr ner orybat gb hf.';
private $callback;
final public function run()
{
call_user_func($this->callback);
return $this->secret . PHP_EOL;
}
public function __set($k, $v)
{
$key = $v[($v[$v])]; // $v is some kind of weird array
$value = $v(); // and a callback!
$this->{$key} = $value;
}
}
$test = new Test;
// start editing here
//Instantiate the reflection object
$reflector = new ReflectionClass('Test');
//Now get all the properties from class A in to $properties array
$properties = $reflector->getProperties();
$i =1;
//Now go through the $properties array and populate each property
foreach($properties as $property)
{
//Populating properties
$a->{$property->getName()}=$i;
//Invoking the method to print what was populated
$a->{"echo".ucfirst($property->getName())}()."\n";
$i++;
}
// end editing here
echo $test->run();