How to take variable value within a Function in one Class to another Function?

Asked

Viewed 2,121 times

2

I have a class for Image Upload, and I want to get the value of a variable within a function calling for salvar()!

I want to create a function called getNome() to get the name of the image with extension. But the variable with the name of the image is in the function salvar(), how do I do it? And I want to give a echo $nome_img; to use at the time of insert in an archive .php!

Imgupload.php

<?php 

class Upload{
    private $arquivo;
    private $altura;
    private $largura;
    private $pasta;

    function __construct($arquivo, $altura, $largura, $pasta){
        $this->arquivo = $arquivo;
        $this->altura  = $altura;
        $this->largura = $largura;
        $this->pasta   = $pasta;
    }

    private function getExtensao(){
        //retorna a extensao da imagem
        return $extensao = strtolower(end(explode('.', $this->arquivo['name'])));
    }

    private function ehImagem($extensao){
        $extensoes = array('gif', 'jpeg', 'jpg', 'png');     // extensoes permitidas
        if (in_array($extensao, $extensoes))
            return true;
    }

    //largura, altura, tipo, localizacao da imagem original
    private function redimensionar($imgLarg, $imgAlt, $tipo, $img_localizacao){
        //descobrir novo tamanho sem perder a proporcao
        if ( $imgLarg > $imgAlt ){
            $novaLarg = $this->largura;
            $novaAlt = round( ($novaLarg / $imgLarg) * $imgAlt );
        }
        elseif ( $imgAlt > $imgLarg ){
            $novaAlt = $this->altura;
            $novaLarg = round( ($novaAlt / $imgAlt) * $imgLarg );
        }
        else // altura == largura
            $novaAltura = $novaLargura = max($this->largura, $this->altura);

            //redimencionar a imagem

            //cria uma nova imagem com o novo tamanho
            $novaimagem = imagecreatetruecolor($novaLarg, $novaAlt);

            switch ($tipo){
                case 1: // gif
                    $origem = imagecreatefromgif($img_localizacao);
                    imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
                            $novaLarg, $novaAlt, $imgLarg, $imgAlt);
                    imagegif($novaimagem, $img_localizacao);
                    break;
                case 2: // jpg
                    $origem = imagecreatefromjpeg($img_localizacao);
                    imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
                            $novaLarg, $novaAlt, $imgLarg, $imgAlt);
                    imagejpeg($novaimagem, $img_localizacao);
                    break;
                case 3: // png
                    $origem = imagecreatefrompng($img_localizacao);
                    imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
                            $novaLarg, $novaAlt, $imgLarg, $imgAlt);
                    imagepng($novaimagem, $img_localizacao);
                    break;
            }

            //destroi as imagens criadas
            imagedestroy($novaimagem);
            imagedestroy($origem);
    }


    public function salvar(){
        $extensao = $this->getExtensao();

        //gera um nome unico para a imagem em funcao do tempo
         $novo_nome = time() . '.' . $extensao;
        //localizacao do arquivo
        $destino = $this->pasta . $novo_nome;

        //move o arquivo
        if (! move_uploaded_file($this->arquivo['tmp_name'], $destino)){
            if ($this->arquivo['error'] == 1)
                return "Tamanho excede o permitido";
                else
                    return "Erro " . $this->arquivo['error'];
        }

        if ($this->ehImagem($extensao)){
            //pega a largura, altura, tipo e atributo da imagem
            list($largura, $altura, $tipo, $atributo) = getimagesize($destino);

            // testa se é preciso redimensionar a imagem
            if(($largura > $this->largura) || ($altura > $this->altura))
                $this->redimensionar($largura, $altura, $tipo, $destino);
        }
        return "Sucesso";
    }

    public function getNome() {

        echo $novo_nome;

    }

}

?>
  • Place the contents of the class.

  • ok all right, editing........

1 answer

4


Could only declare a new property for the class.
Can be declared private.

A generic example:

class Test{
    private $foo;
    
    public function A() {
        $this->foo = 'bar';
    }
    
    public function B() {
        return $this->foo;
    }
}

$c = new Test;
$c->A();
echo $c->B();





For your specific case

Declaring the property

class Upload{
    private $arquivo;
    private $altura;
    private $largura;
    private $pasta;
    private $novo_nome; // declare aqui como private

The save method():

public function salvar(){
    $extensao = $this->getExtensao();

    //gera um nome unico para a imagem em funcao do tempo
     $this->novo_nome = time() . '.' . $extensao;
    //localizacao do arquivo
    $destino = $this->pasta . $this->novo_nome;

The getName method()

public function getNome() {

    echo $this->novo_nome;

}
  • The guy worked perfect thank you, it’s because I never deepened when the subject is class!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.