Ir para conteúdo

POWERED BY:

Arquivado

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

Pedro Roccon

Classe PHP

Recommended Posts

Galera, primeiramente boa tarde.

 

Acredito eu que minha dúvida seja simples. É referente ao jeito que chamamos uma classe. Por exemplo, vou mostrar uma classe bem simples que deixa o texto em negrito somente para testes:

 

<?php
class Negrito {

private $str;

function __construct($str) {
$this->str = $str
}
function negrito() {
echo '<strong>'.$this->str.'</strong>';
}

}
?>

 

Bom, agora vamos lá, para eu 'chamar' essa classe precisaria:

 

$obj = new Negrito('Meu novo texto aqui');
$obj = negrito();

 

 

 

Gostaria de saber se toda vez que eu for querer deixar um texto em negrito eu preciso criar um novo objeto, por exemplo o new Negrito. Se caso tenha acho que compensaria criar 1 função para isso, pois eu queria uma classe para formatação de textos.

 

Desde já agradeço, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

$obj = new Negrito('Meu novo texto aqui'); $obj = negrito();

Isso ta errado.

 

$obj = new Negrito('Meu novo texto aqui');

Aqui você instancia o objeto, pronto.

agora seu objeto já existe e esta dentro da variável $obj.

Agora o negrito é um método então você precisa chamar o método atrelado ao objeto e não dar um novo valor para $obj sendo assim seria

 


$obj = new Negrito('Meu novo texto aqui'); $obj->negrito();

para cada texto você tem que instanciar a classe novamente.

 

 


 

$obj = new Negrito('Meu novo texto aqui'); 
$obj->negrito();

$obj2 = new Negrito('Outro texto negrito');
$obj2->negrito();

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos simplificar ?

 

 

 

 

<?php
class Negrito {

public $str;

function __construct($str) {
$this->str = $str
return print '<strong>'.$this->str.'</strong>'
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não vamos simplificar, pois:

- Construtores CONSTROEM, não retornam nada, esse código não vai funcionar

- Se for para programar funcional, use funções

- Propriedades públicas são manipuláveis e violam o encapsulamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de a resposta do Vinícius estar correta para o caso apresentado não é de todo certo dizer que:

 

 

$obj = negrito();$obj = negrito();

Pois uma classe que implemente o método mágico __invoke() permite a um objeto fazer alguma coisa se invocado na forma de uma função.

 

E nesse caso ele poderia retornar a string negritada. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade Enrico, equívoco feio. :skull:

 

 

Para o seu caso específico amigo, convém criar função, pode ser dentro da class mesmo. Vejamos:

 

 

 

<?php
class Negrito {

private $str;

public function GeraNegrito($str) {

$this->str = $str;

return print '<strong>'.$this->str.'</strong>';
}

}
$obj = new Negrito();
$obj->GeraNegrito('Alaerte Gabriel estava equivocado na class anterior. Não perdoem ele.');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Equívoco seu Enrico... O resultado é o texto em Negrito, colega.

 

 

Headers already sent ??????... :sleep:

 

Ele poderia utilizar apenas o print, ou apenas o return e utilizar o print no objeto.

 

Mas para que print?? O resultado disso é fatal: Headers already sent (clássico). é melhor apenas retornar, não obstruindo o output.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade Enrico, equívoco feio. :skull:

 

Na tentativa de mostrar um recurso pouco utilizado escondido do patrão esqueci da posição do cifrão. :yay:

 

Mas ainda assim, numa hierarquia de namespaces para funções bem definida e um autoloader específico ainda é possível,

 

KA-CHOW!!! :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tentativa de mostrar um recurso pouco utilizado escondido do patrão esqueci da posição do cifrão. :yay:

 

Mas ainda assim, numa hierarquia de namespaces para funções bem definida e um autoloader específico ainda é possível,

 

KA-CHOW!!! :P

 

Pressa meu amigo, pressa. :cry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou falando que se você executar este método e depois tentar manipular qualquer header, plaft... Headers already sent. Enviar output é problemático, isso é uma responsabilidade de um participante que irá enviar a resposta http.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um exemplo plausível ao que ele se refere, é apenas um exemplo para que ele tenha noção.

 

 

 

class textFormat{    public static function bold( $str ){        return '<b>' . $str . '</b>';    }} echo textFormat::bold('foo');echo textFormat::bold('bar');

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.