Ultimamente, tenho experimentado e investigado técnicas de fluxo de dados em PHP. Às vezes fico um pouco tonto com OOB, meu cérebro fica me incomodando com alguma outra maneira de expressar código e computação usando classes. Eu queria uma maneira de expressar e alterar a lógica do meu código de uma maneira direta. Esta é uma estrutura tosca que eu criei.
POC: Abstração da sequência do programa e dos estados dos dados.
interface iStateHolder{}
interface iNode{}
class StateHolder implements iStateHolder{
public function StateHolder($state){
if(is_array($state))
{
foreach($state as $key => $state){
$this->$key = $state;
}
}
else{
$this->state = $state;
}
}
}
class Node implements iNode{
private $creation_time, $state_object, $_return;
public function Node(iStateHolder &$state = null){
$this->creation_time = time();
$this->state_object = $state;
}
public function foo1(){
// do stuff
$this->_return = $return_data = "foo1 return data";
return $this;
}
public function foo2(){
// do stuff
$this->_return = $return_data = "foo2 return data";
return $this;
}
public function foo3(){
// do stuff
$this->_return = $return_data = "foo3 return data";
return $this;
}
public function link(iNode $adjacent_node){
$adjacent_node->_return = $this->_return;
}
public function state_object(){
return $this->state_object;
}
public function return_data(){
return $this->_return;
}
public function creation_time(){
return $this->creation_time();
}
}
$node1 = new Node(new StateHolder(
array(
'ip' => "127.0.0.1",
'host_name' => 'ravin',
'sample' => 'watever'
)
));
$node2 = new Node();
$node1->foo1()->foo2()->foo3()->link($node2);
// program sequence is abstracted, and pass data to node2 via link method
$node1->foo3()->foo2()->foo1()->link($node2);
$node2->foo1()->foo1()->foo2();
// holds the state object passed by reference
var_dump($node1->state_object());
// node2 has the return data of foo2()
var_dump($node2);