Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde pessoal gostaria de saber em qual versão o php passou a ter os modificadores de acesso, pois estou tentando utiliza-los na versão 5.3.10 sem sucesso algum... code:
<?php
private $name = "Matheus";
publiuc getName(){
return $this->name;
}
?>
Como podem ver é um código mt simples, é necessario alguma configuração extra? Ou essa versão não da suporte ?AA tava escrito errado por que era tão pouco código que nem colei do sublime, e enquanto a declaração ela acontece exatamente como você colocou mas não funciona =||
A minha idéia era essa velho:
class ConnectionFactory{
private $dbAccess = new mysqli("localhost","root","099411","phpnmysql");
public function getDbAcess(){
return $this->$dbAccess;
}
}
Mas não funciona, eu tento instanciar e ele não coloca nada no banco e não me devolve nenhum erro, você poderia me ajudar a configurar as diretivas de erro? Sempre tenho que me virar debugando linha por linha.
Queria muito fazer isso com um método estatico mas a minha versão não da suporte.Certo, vamos ver os erros ai, modificações:
class ConnectionFactory{
private static $dbAccess = false; // declaracao estatica
/ AQUI, na instancia da classe, é que $dbAccess é setada /
function __construct() {
// tentar conectar
$conexao = mysqli_connect("localhost","user","pass");
// se conectou, passa a conexao pra variavel $dbAccess
if ( $conexao ) self::$dbAccess = $conexao;
}
// metodo estatico para pegar a conexao
static function getDbAcess(){
return self::$dbAccess;
}
}Assim sendo voce pode usar:
// ASSIM:
$classe = new ConnectionFactory();
$conexao = $classe->getDbAcess();
// OU ASSIM:
$conexao = ConnectionFactory::getDbAcess();
Se tiver dúvidas, pergunte, se resolveu marque como tal!
Abraço.
Então velho, como eu disse o php só da suporte aos métodos estaticos após o php 5.4 e estou utilizando o 5.3, e enquanto ao msqli se tento conectar com o banco pelo construtor dele eu consigo, só não consigo se coloco algum modificador, a maneira como estou tentando:
Estrutura de diretórios:
dao
DAOUser.class.php
--db
--DBAccess.class.php
<?php
class DBAccess{
private $dbAccess = false;
private function _construct()
{
$this->dbAccess = new mysqli("localhost","root","099411","phpnmysql");
}
public function getDBAccess()
{
return $this->dbAccess;
}
}
?>
<?php
include("/db/DBAccess.class.php");
$db = new DBAccess();
$daoUser = $db->getDBAccess();
if($daoUser)
{
echo "ok";
}
?>como eu disse o php só da suporte aos métodos estaticos após o php 5.4 e estou utilizando o 5.3
Não, o PHP tem suporte a métodos estáticos desde o PHP 5. E cuidado com os estáticos, eles têm o propósito de criação de objetos, não vá saindo simplesmente utilizando eles por aí, não use classe como namespace de função.
>
class ConnectionFactory{
private $dbAccess = new mysqli("localhost","root","099411","phpnmysql");
// ...
}
Isso está errado. Na definição de uma propriedade você pode apenas definir a visibilidade e atribuir algum valor fixo (um inteiro, uma string...), uma constante de classe, mágica ou "normal", ou alguns dos construtores de linguagem (array(), NULL...)
Tudo aquilo que faz parte do objeto deve ser construído, logo, feito dentro do __construct():
<?php
class ConnectionFactory{
private $dbAccess;
public function __construct() {
$this -> dbAccess = new mysqli("localhost","root","099411","phpnmysql");
}
}
Não vou entrar no mérito de até mesmo essa implementação corriqueira e demonstrativa está conceitualmente incorreta.
Então velho, como eu disse o php só da suporte aos métodos estaticos após o php 5.4 e estou utilizando o 5.3, e enquanto ao msqli se tento conectar com o banco pelo construtor dele eu consigo, só não consigo se coloco algum modificador, a maneira como estou tentando:
Não mesmo! Tudo que se tem desse livro em diante, incluindo o operador de resolução de escopo ( :: ), fazem parte da reescrita do modelo de Orientação a Objetos implementado quando do lançamento do PHP 5.
Não, o PHP tem suporte a métodos estáticos desde o PHP 5. E cuidado com os estáticos, eles têm o propósito de criação de objetos, não vá saindo simplesmente utilizando eles por aí, não use classe como namespace de função.
Ser ou não ser (eis a questão :P ) estático não tem nada a ver com criação de objetos e sim com caracterizar a quê/quem um método, propriedade ou constante pertence.
Quando um desses recursos é estático, ele pertence á classe, isto é, toda ve que aquele recurso for invocado, considerando-se o fluxo vertical e crescente de uma requisição, eles manterão seus valores ou estados se afetados até sua invocação.
Quando não são estáticos, pertencem ao objeto instanciado e atribuído à uma variável, isto significa que esses recursos não compartilharão valores ou estados automaticamente pois são limitados principalmente pelo escopo das variáveis às quais possam ter sido atribuídos.
E é nessa brecha que entra o padrão de projeto Registry, mas isso são outros quinhentos.
Velho desculpem a confusão enquanto a utilização de métodos estaticos somente após a versão 5.4 eu havia lido em um comentário da documentação, alguém escreveu isso lá e acabou me confundindo. Enquanto a propriedade ter o acesso inteiro ao banco, era somente um teste, mt obrigado.
Oi!
Cade a declaração da classe? Ex:
class Teste {
Isto deve funcionar! Observe que escreveu "public" errado também.