Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junaooaks

class php erro

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);

Compartilhar este post


Link para o post
Compartilhar em outros sites

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());


william

e 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
        
    }
    
    
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?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();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.