Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvidas com classe instância e o transporte de dados


Prototype

Pergunta

Olá pessoal do Script Brasil, sou novo no fórum.

Estou iniciando em php, mais precisamente em poo e estou com um probleminha em um script que preciso fazer rodar.

<?php

class Server{
    private $ip;
    private $pt;
    public $status;
    
    
    public function __construct($serverip, $serverpt) {
    $this->ip = $serverip;
    $this->pt = $serverpt;
    $this->Verificar();
    }
    
    public function Verificar(){
    
    $status = @fsockopen($this->ip,$this->pt,$errno,$errstr,(float)0.1);

    if(!$status){ echo "error<br>";
        return 0;
        }
        else {
        echo "done<br>";
        return 1;
        
        fclose ( $status);
        } 
    }
}

//functions

function VerificarServer(){

$server= new Server("192.168.0.200","80");
$login= new Server("192.168.0.200","1433");


if ($login & $server == 1 ) {
    echo "<br>online";
    } else {
    echo "<br>offline";
    }
}

VerificarServer();
?>

Meu problema aparentemente esta na passagem dos dados da classe para a instancia, que no caso esta dentro da função. A idéia é pegar o valor de retorno( 0 ou 1) e tacar na variavel, no caso, $server e $login.

Qualquer ajuda será bem vinda. :)

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Oi!

Tu já trabalhaste com POO em alguma outra linguagem? Tentas não ecoar nada dentro de sua classe.

O que podes te ajudar... Apoós criar a instância, execute var_dump($login) e verifique o conteudo interno =)

Quando tu comparas duas variáveis, trabalhe com && (e comercial duplo)

($login && $server == 1 )

Acho que isso já ajuda =)

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu pelo comentário...

o echo e só para testes, para saber se os dados estão indo pra a classe. O var_dump($login) me retornou esse valor final:["status"]=> NULL}...

edit

troquei a variavel "$status" por "$this->status" e me retornou:

object(Server)#2 (3) { ["ip:private"]=> string(13) "192.168.0.200" ["pt:private"]=> string(4) "80" ["status"]=> resource(3) of type (stream) }

Editado por Prototype
Link para o comentário
Compartilhar em outros sites

  • 0

Ah eu não vi que tinhas um atributo de instância com status! SIm sim, toda vez que referenciar um atributo de instância no php tu és obrigado a chamá-lo com $this =D

Ah bom, é que quando quando trabalhares com objetos tente não ecoar nada, e manter uma arquitetura MVC =)

Acertaste a tua classe ou ainda permanece com problemas?

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

sim, persiste.

o var_dump me retorna

["status"]=> resource(3) of type (stream) quando o server está online

["status"]=> bool(false) quando offline

mas de uma certa forma, depois de executar o método os valores de $server e $login não são retornados como:

$server= 1;

$login=1;

não sei se preciso fazer algum tipo de conversão de dados.

:closedeyes:

Link para o comentário
Compartilhar em outros sites

  • 0

Bom se tu precisas que $server seja igual a 1 e login também, basta perguntar; se o status é false, retorna 1; se não, zero...

Seria isso?

Desculpe-me se falei algo estranho, é que o trabalho tá corrido hehe

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Na variável status? Então atribui a ela; porém tu tens que ter o ponteiro do sock, não esqueças.

Link para o comentário
Compartilhar em outros sites

  • 0

class Server {
        private $ip;
        private $port;
        private $pointer;
        
        public function __construct($ip,$port) {
            $this->ip = $ip;
            $this->port = $port;
            $this->conectar();
        }
        public function __destruct() {
            @fclose($this->pointer);
        }
        public function __toString() {
            return "$ip:$port";
        }
        public function getIp() {
            return $this->ip;
        }
        public function getPort() {
            return $this->port;
        }
        public function getPointer() {
            return $this->pointer;
        }
        private function conectar() {
            $this->pointer = @fsockopen($this->ip,$this->port);
            if(!$this->pointer)
                throw new Exception();
        }
    }
try {
        $server = new Server("192.168.10.1",80);
        unset($server);
    }
    catch(Exception $e) {
        echo "Impossível Conectar ao Servidor!";
    }

Eu nunca trabalhei com sock cara!

Vê se funciona =D

Editado por Wanderson Camargo
Link para o comentário
Compartilhar em outros sites

  • 0

O código continha erros de referências a atributos do objeto... Melhorei agora!

Isso é que dá trabalhar com php e estudar java =P

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, muito obrigado pela ajuda. Ainda não está do jeito que eu quero mas agora vejo possibilidades. Vou dar uma estuda nesses recursos e tentar entende-los.

Muito obrigado, abraços.

edit:

funcionando:

<?php
class Server{
    private $ip;
    private $pt;
    private $pointer;
    public $status;
    
    
    public function __construct($serverip, $serverpt) {
    $this->ip = $serverip;
    $this->pt = $serverpt;
    $this->Verificar();
    }
    
    private function Verificar(){
    
    $this->pointer = @fsockopen($this->ip,$this->pt,$errno,$errstr,(float)0.1);
    
    if(!$this->pointer){
        $this->status=0;
        }
        else {
        $this->status=1;
        fclose ( $this->pointer);
        } 
    }
    public function getStatus() {
            return $this->status;
        }
}

//functions

function VerificarServer(){

$server= new Server("192.168.0.1",80);
$server=$server->getStatus();

$login= new Server("192.168.0.1",80);
$login=$login->getStatus();


if ($login && $server == 1 ) {
    echo "<br>online";
    } else {
    echo "<br>offline";
    }
}

VerificarServer();
?>

vlw mesmo cara! :D

Editado por Prototype
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...