Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
pessoal acho que estou me confundindo nos paradigma da programação OOP
estou criando uma class que ainda nao esta fazendo nada
<?php
namespace application\os;
$controller= new OsController;
$controller->modo = $_POST[modo];
$controller->idalterar = $_POST[idalterar];
$controller->dados = json_decode(stripslashes($_POST[dados]), true);
$controller->itens = json_decode(stripslashes($_POST[itens]), true);
echo $controller->modo;
class OsController{
public $modo;
public $idalterar;
public $dados;
public $itens;
function __construct() {
session_start();
//include_once '../../lib/php/C_Lib.php';
call_user_func_array(array(OsController, $this->modo), array());
}
function Insert(){
//tirar zero a esqueda
$this->dados[pessoa_id] = intval($this->dados[pessoa_id]);
//declarar a situação
$this->dados[situacao] = 'ABERTO';
$this->dados[tipo] = 'OS';
return $dados;
}
}
quero da um echo no return,
so que esta aparecendo esta mensagem
>
Erro msg Json!
poderia me dar uma direção?
Meio doido isso, o que você quer fazer primeiramente?
A mensagem "Erro msg Json!" é oq aparece, pq é conteúdo da $_POST[modo];
Luiz, foi a forma que encontrei para acessar as functions de forma dinâmica
>
call_user_func_array(array(OsController, $this->modo), array());
call_user_func_array(array(OsController ->nome da class
$this->modo ->qual function vai ser executada(insert, delete,update)
), array());
williame simples, esta class tem varias funções
class OsController{
public $modo;
public $idalterar;
public $dados;
public $itens;
function __construct() {
session_start();
include_once '../../lib/php/C_Lib.php';
call_user_func_array(array(OsController, $this->modo), array());
}
function Insert(){}
function Delet(){}
function Update(){}
}
o parametro no __construct() faz o redirecionamento pra mim
call_user_func_array(array(OsController ->nome da class
$this->modo ->qual function vai ser executada(insert, delete,update)
), array());
so que estou tendo problema para pegar o retorno de cada ação
de forma dinamica sem fazer if.
nao quero fazer algo assim
if($controller->modo=='Insert'){echo $controller->Insert();}
if($controller->modo=='Delet'){echo $controller->Delet();}
.
.
.
.
tem hora que tenho umas ideias meio maluca mesmo...kkkkkk
nao gosto de IF kkkkk
Quando você execulta
$controller= new OsController;
ele já executa o construtor e faz oq você quer, você tem q colocar esse tratamento lá dentro,
caso queira manipular essas informações, manipule o POST mas passa para ele
assim, ira funcionar
<?php
namespace application\os;
$controller = new OsController($_POST);
class OsController{
public $modo;
public $idalterar;
public $dados;
public $itens;
function __construct($post) {
$this->modo = $post[modo];
$this->idalterar = $post[idalterar];
$this->dados = json_decode(stripslashes($post[dados]), true);
$this->itens = json_decode(stripslashes($post[itens]), true);
session_start();
//include_once '../../lib/php/C_Lib.php';
call_user_func_array(array($this, $this->modo), array());
}
function Insert(){
//tirar zero a esqueda
$this->dados[pessoa_id] = intval($this->dados[pessoa_id]);
//declarar a situação
$this->dados[situacao] = 'ABERTO';
$this->dados[tipo] = 'OS';
return $dados;
}
}<?php
namespace application\os;
class OsController{
public $modo;
public $idalterar;
public $dados;
public $itens;
function __construct($post) {
session_start();
$this->modo = $post['modo'];
$this->idalterar = $post['idalterar'];
$this->dados = json_decode(stripslashes($post['dados']), true);
$this->itens = json_decode(stripslashes($post['itens']), true);
if(file_exists('../../lib/php/C_Lib.php')):
include_once('../../lib/php/C_Lib.php');
else:
echo 'Ocorreu um erro ao incluir o arquivo: <strong>C_Lib</strong> <br />'."\n";
endif;
call_user_func_array(array($this, $this->modo), array());
}
public function Insert(){
//tirar zero a esqueda
$this->dados['pessoa_id'] = intval($this->dados['pessoa_id']);
//declarar a situação
$this->dados['situacao'] = 'ABERTO';
$this->dados['tipo'] = 'OS';
return $dados;
}
}
$controller = new OsController($_POST);
echo $controller->Insert();Não brother, o call_user_function no __constructor ta errado!
Eu entendi sua ideia de metodo dinamico. vc esta tentando desenvolver um CONTROLLER, mas veja bem "delegação de eventos" e "responsabilidade unica". um Controller delega responsabilidades. Então seus métodos insert e delete não deveriam estar ai!
Estude a respeito de métodos mágicos especialmente o __call. (Particularmente não gosto da ideia).
E também sobre Front Controller e Command (patterns, conteúdo mais avançado).
class OsController { private $args = ['action' => null]; public function __construct(array $args) { $this->args = $args; } public function setArgs(array $a) { $this->args = $a; } protected function insert(array $values = NULL) { echo "INSERT " . PHP_EOL; return true; } protected function delete(array $values = NULL) { echo "DELETE " . PHP_EOL; return $values['id']; } public function execute() { if (!method_exists($this, $this->args['action'])) throw new \BadFunctionCallException(sprintf("Method [%s] not found", $this->args['action'])); return call_user_func_array([$this, $this->args['action']], [$this->args]); }}$post = ['action' => 'delete', 'id' => 3];$c = new OsController($post); var_dump($c->execute());$c->setArgs(['action' => 'insert']);var_dump($c->execute());try { $c->setArgs(['action' => 'update']); var_dump($c->execute());} catch (\Exception $e) { echo $e->getMessage();}
como assim echo no return?
o return RETORNA, simples assim.
então.
// call_user_func_array(array(OsController, $this->modo), array()); // que diabos e isso =X
$array = $controller->insert(); //RETURN ARRAY
var_dump($array);