Ir para conteúdo

POWERED BY:

Arquivado

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

Brayan Rastelli

[Resolvido] Php POO

Recommended Posts

vo usar esse tópico pra uma duvida meio noob de POO hahah

 

pq não posso instanciar dois objetos diferentes no mesmo arquivo ?

 

olha o cód.

 

<?php                      
                      include 'app/produto.class.php';
                      include 'app/grupo.class.php';
                      
                      $grup = new grupo(); //instancio a class grupo
                      echo '<select name=\"grupo\">'; //crio um select pra escolher o grupo(pra ver os produtos desse grupo)
                      echo $grup->getAll(100,'<option>','</option>');
                      echo '</select>';
                      
                      $prod = new produto();
                      echo '<table>
                             <tbody>';
                      echo          $prod->getAll(100,'<td>','</td>'); //gero a tabela com o nome dos produtos
                      echo ' </tbody>
                            </table>';
                  ?>

só q ao fazer isso ele só instancia o grupo.. mostrando o select..

e se inverter a ordem ele mostra só a tabela de produtos.. e nao mostra o select dos grupos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imao, seu post foi separado para criar um novo tópico.

 

Crie um novo tópico para suas dúvidas.

 

O tópico ao qual pertencia o seu post link

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq não posso instanciar dois objetos diferentes no mesmo arquivo ?

 

Opz, claro que pode, se não está funcionando então alguma coisa está errada nas suas classes (tome cuidado com passagens por referência), veja só:

 

Group.php

<?php
class Group {
private $id;
private $name;

public function __construct( $id = null ){
if ( $id ) $this->id = (int) $id;
}

public function getId(){
return $this->id;
}

public function getName(){
return $this->name;
}

public function setName( $name ){
$this->name = $name;
}
}

 

Product.php

<?php
class Product {
private $id;
private $name;
private $group;

public function __construct( $id = null ){
if ( $id ) $this->id = (int) $id;
}

public function getName(){
return $this->name;
}

public function getGroup(){
return $this->group;
}

public function setGroup( Group $group ){
$this->group = $group;
}

public function setName( $name ){
$this->name = $name;
}
}

 

test.php

<?php
require 'Group.php';
require 'Product.php';

$group = new Group( 1 );
$group->setName( 'My Group' );

$product = new Product( 1 );
$product->setName( 'Test' );
$product->setGroup( $group );

var_dump( $group );
var_dump( $product );
var_dump( $product->getGroup() );

 

A saída será:

object(Group)#1 (2) {

["id":"Group":private]=>

int(1)

["name":"Group":private]=>

string(8) "My Group"

}

object(Product)#2 (3) {

["id":"Product":private]=>

int(1)

["name":"Product":private]=>

string(4) "Test"

["group":"Product":private]=>

object(Group)#1 (2) {

["id":"Group":private]=>

int(1)

["name":"Group":private]=>

string(8) "My Group"

}

}

object(Group)#1 (2) {

["id":"Group":private]=>

int(1)

["name":"Group":private]=>

string(8) "My Group"

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

lmao, em 26 outubro 2009 - 11:00 , disse:

pq não posso instanciar dois objetos diferentes no mesmo arquivo ?

 

Opz, claro que pode, se não está funcionando então alguma coisa está errada nas suas classes (tome cuidado com passagens por referência), veja só:

estranho cara =/

 

olha minhas classes:

 

produto

grupo

 

a classe de conexão é essa

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa colocar null no id

 

 

 

 

 function insert($nome,$unidade,$grupo,$custo)
        {
            try{
                $sql = $this->conex->prepare("INSERT INTO produtos (ID, PRODUTO,UNIDADE,GRUPO,CUSTO,CUSTOMED) values (?,?,?,?,?,?)");
                $sql->bindValue(1,null);
                $sql->bindValue(2,$nome);
                $sql->bindValue(3,$unidade);
                $sql->bindValue(4,$grupo);
                $sql->bindValue(5,$custo);
                $sql->bindValue(6,$custo);
                $sql->execute();

                $id_inserido = $this->conex->lastInsertId(); 
                $this->conex = null;
                return $id_inserido;
            }
            catch( PDOException $ex ){ echo "Erro: ".$ex->getMessage(); }
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao mudou em nada..

 

porém me ajudou a achar o erro.. tirei o include nas classes do arquivo de conexão.. e coloquei no arquivo principal.. ae nao deu mais erro http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

 

valeww

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao mudou em nada..

 

porém me ajudou a achar o erro.. tirei o include nas classes do arquivo de conexão.. e coloquei no arquivo principal.. ae nao deu mais erro http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

 

valeww

 

 

use a funcao autoloat eh mt util

 

function __autoload($strClass){
	if (file_exists("../classes/{$strClass}.class.php")) {
        require_once("../classes/{$strClass}.class.php");
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu crio um arquivo chamando autoload.php onde coloco a funcao do autoload e os outros includes que nao de classes tipo lib etc e do include nesse arquivo nos locais onde as classes vao ser instanciadas

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu crio um arquivo chamando autoload.php onde coloco a funcao do autoload e os outros includes que nao de classes tipo lib etc e do include nesse arquivo nos locais onde as classes vao ser instanciadas

 

tah.. consegui..

 

duvida: tenho a seguinte estrutura:

 

.app
  .classes.class.php
  .autoload.php
.config
  .conexao.class.php

sendo q conexao tem um método __construct, como vo por no autoload pra inclui-la somente quando precisar da conexão?

 

http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ainda não entendeu o funcionamento do autoload então.

Ele é executado no momento em que a classe é instanciada/chamada

 

http://br.php.net/autoload

Ou seja, qndo você instanciar a conexão, o include será feito pelo método autoload.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php                      

 

function __autoload($strClass){

if (file_exists("app/{$strClass}.class.php")) {

require_once("app/{$strClass}.class.php");

}

}

// você pode instanciar qualquer calsse que estviver na pasta app/ aqui que a funcao da include automatico

 

$grup = new grupo(); //instancio a class grupo

echo '<select name=\"grupo\">'; //crio um select pra escolher o grupo(pra ver os produtos desse grupo)

echo $grup->getAll(100,'<option>','</option>');

echo '</select>';

 

$prod = new produto();

echo '<table>

<tbody>';

echo $prod->getAll(100,'<td>','</td>'); //gero a tabela com o nome dos produtos

echo ' </tbody>

</table>';

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

a tah.. entendi agora

 

adicionei mais essas linhas pra dar o autoload na pasta config/ tbm

 

if (file_exists("config/{$strClass}.class.php")) {
            require_once("config/{$strClass}.class.php");
        }

^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá.. só vejo 'um problema', em fazer assim.. ficar dando caminhos dentro do autoload.. tem uma forma bem mais elegante e eficiente:

Veja o init.php do Fabyo

http://forum.imasters.com.br/index.php?/topic/353635-classe-mysqli-mais-uma/page__hl__init__fromsearch__1

Compartilhar este post


Link para o post
Compartilhar em outros sites

init dele é para definir os caminhos do include com referencia ao BASE_PATH

 

 

 

 

 

define('BASE_PATH', realpath(dirname(__FILE__)).'/');
        
set_include_path(implode(PATH_SEPARATOR, array(
        BASE_PATH.'classes', //aqui no caso você colocaria o diretorio onde estao suas classes
        get_include_path()
)));

if(!file_exists(BASE_PATH.'config.php')){
        exit('Erro config.php nao encontrado');
} else {
        require_once BASE_PATH.'config.php';
}

function __autoload($class_name) {
        require_once $class_name . '.php';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim .. eu consegui (Y)

 

só tava com duvida pra adicionar o arq. de conf.

 

tava colocando mais um diretório aqui

 

BASE_PATH.'classes', BASE_PATH.'config',

só q nao deu

 

ae coloquei no if

 

if(!file_exists(BASE_PATH.'config/config.php')){

assim funcionou.. porem nao sei se é o certo :S

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.