@ 2017-07-07T07:12:18Z <?php
class Object {
//
protected $hasMany;
protected $theSignificativeProperties = ['nome', 'login'];
public function getHasMany() {
return $this->hasMany;
}
public function getSignificativeProperties() {
return $this->theSignificativeProperties;
}
}
class Aluno extends Object {
private $nome;
private $login;
protected $hasMany = ['post', 'disciplina'];
protected $theSignificativeProperties = ['nome', 'login'];
/*public function getHasMany() {
return $this->hasMany;
}*/
/*public function getSignificativeProperties() {
return $this->theSignificativeProperties;
}*/
}
class Post extends Object {
//
}
class Disciplina extends Object {
protected $hasMany = ['aluno'];
}
class EntityManager {
//
}
class RelationalEntityManager extends EntityManager {
public function find() {
//
echo 'Usando o RelationalEntityManager.';
}
}
class BaseController {
protected $objectService;
protected $model;
public function __construct($modelName) {
$this->model = $modelName;
$this->objectService = new BaseObjectService($modelName, new RelationalEntityManager());
}
public function view() {
$args = func_get_args();
$this->objectService->view($args);
}
}
class AlunoController extends BaseController {
}
class BaseObjectService {
protected $em;
protected $model;
public function __construct($modelName, EntityManager $entityManager) {
$this->model = $modelName;
$this->em = $entityManager;
}
public function view($args) {
//
echo 'Argumentos: ';
print_r($args);
echo 'Classe em questão: ' . $this->model;
echo ' -> Propriedades: ';
$reflect = new ReflectionClass(ucfirst($this->model));
// $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED);
$props = $reflect->getProperties();
foreach ($props as $prop) {
print $prop->getName() . ", ";
}
$methods = $reflect->getMethods();
foreach ($methods as $method) {
print $method->getName() . ", ";
if ( $method->getName() == 'getHasMany') {
echo 'achou o HASMANY de ' . $this->model ;
//print_r($reflect->getHasMany());
$hasManyMethod = $reflect->getMethod('getHasMany');
$c = ucfirst($this->model);
$x = new $c();
$array = $hasManyMethod->invoke($x);
print_r($array);
echo ' --- ';
}
}
// var_dump($props);
$this->em->find();
}
}
echo 'Aluno: ' . class_exists('Aluno') . '<br>';
echo 'Teste: '; var_dump(class_exists('Teste')) . '\n';
$a = new Aluno();
print_r ( $a->getSignificativeProperties() );
$alunoController = new AlunoController('aluno');
$alunoController->view('marcelo', 'boi', 1);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 Fatal error: Cannot use 'Object' as class name as it is reserved in /in/fEVnt on line 3
Process exited with code 255 . Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Fatal error: Cannot use 'Object' as class name as it is reserved in /in/fEVnt on line 3
Process exited with code 255 . Output for 5.6.0 - 5.6.40 , 7.0.0 - 7.0.33 , 7.1.0 - 7.1.33 Aluno: 1<br>Teste: bool(false)
Array
(
[0] => nome
[1] => login
)
Argumentos: Array
(
[0] => marcelo
[1] => boi
[2] => 1
)
Classe em questão: aluno -> Propriedades: nome, login, hasMany, theSignificativeProperties, getHasMany, achou o HASMANY de alunoArray
(
[0] => post
[1] => disciplina
)
--- getSignificativeProperties, Usando o RelationalEntityManager. preferences:dark mode live preview
175.44 ms | 402 KiB | 291 Q