Autor Zpráva
gardener
Profil
Zdravím, potřebuji nastavit v jednom konfiguračním souboru odlišné údaje pro připojení k MySQL db.

Problém je ten, že jsou v konfiguráku pře definicí proměnné uvedeno klíčové slovo var.

Pokud zapíši:
class JConfig {

if ($_SERVER["SERVER_ADDR"]=="127.0.0.1")
{
  $host = 'localhost';
  $user = 'root';
  $db = 'shop';
  $password = '';		
}
else	
{
  $host = 'localhost';
  $user = 'root';
  $db = 'shop';
  $password = '';
}
	
	var $offline = '0';
	var $editor = 'tinymce';
	var $list_limit = '20';
}


Hlásí mi PHP chybu " unexpected T_IF, expecting T_FUNCTION", přitom ale podmínka je zapsána správně.

Tuší někdo, v čem by mohl být problém?

Díky za každou radu.
fuckin
Profil
Trida sdruzuje metody, nikoly samostatny kod. Proto tento kod treba dej do konstruktoru.

V php 4 se pouziva pro deklaraci var. V php 5 se pouziva misto var urceni viditelnosti, tedy napr public,private...
gardener
Profil
To jsem úplně zapoměl, díky za radu, každopádně, pokud to zapíši do konstruktoru. nemohu stále použít klíčové slovo var, které asi bude nakonec potřeba.

Viz:

	function __construct() {
if ($_SERVER["SERVER_ADDR"]=="127.0.0.1")
{
  $host = 'localhost';
  $user = 'root';
  $db = 'shop';
  $password = 'password';		
}
else	
{
  $host = 'localhost';
  $user = 'root';
  $db = 'shop';
  $password = '';
}
	}
AM_
Profil
zapisuje se to takhle:
class a{
  function a(){
    //kod
  }
  var $b;
  var $c;
}


ale:
- je zvykem psát spíš nejdřív atributy (členské proměnné) a až pak metody
- pokud vím, tak klíčové slovo var není (alespoň v PHP5, OOP PHP4 jsem nikdy nezkoumal) potřeba
fuckin
Profil
AM:
zapisuje se to takhle:

OOP PHP4 jsem nikdy nezkoumal
Tak proč používáš zápis konstruktoru z php4? V php 5 se již dá využít slova __construct()


- pokud vím, tak klíčové slovo var není (alespoň v PHP5, OOP PHP4 jsem nikdy nezkoumal) potřeba
Ne není potřeba, spíše je lepší se mu úplně vyhnout. V php 5 se var vyhodnocuje jako proměnná s viditelností public. Proto ekvivalent je public $promenna;
Proměnná, která není uvedena v této deklaraci má automaticky viditelnost public. To samé platí u metod.

To samé platí u metod. Dobrý programátor určí i viditelnost metody.

Tedy upraveno dle mého názoru do lepší formy.
class a{
  public function __construct(){
    //kod
  }
   public $b;
   public $c;
}

gardener:

Tedy gardenerův kód upraven bude vypadat takto.
<?

class a
{
    private $host;
    private $user;
    private $db;
    private $password;

    public function __construct()
    {
        if ($_SERVER["SERVER_ADDR"] == "127.0.0.1") {
            $host = 'localhost';
            $user = 'root';
            $db = 'shop';
            $password = 'password';
        } else {
            $host = 'localhost';
            $user = 'root';
            $db = 'shop';
            $password = '';
        }
    }
}

    }


V php 4 není podpora pro __construct() a misto public,private... pouzij var u proměnných.
AM_
Profil
fuckin:
Tak proč používáš zápis konstruktoru z php4? V php 5 se již dá využít slova __construct()
čistě má nepozornost, neměl to být konstruktor ale libovolná funkce, nedošlo mi, že "a" jsem pojmenoval už třídu :)
konstruktory rád píšu jako __construct() a docela mi to v jiných jazycích chybí, protože když se člověk rozhodne třídu v takovém jazyce přejmenovat, musí přejmenovávat i konstruktor (nebo na to zapomene a vznikne blbě hledatelná chyba).
fuckin
Profil
AM:
Svatá pravda.

Chudáku, djpw nerespektuje tvé podtržítko na konci :-)
AM_
Profil
fuckin:
Chudáku, djpw nerespektuje tvé podtržítko na konci :-)
spíš je to možná funkce založená díky mě :) má přezdívka je AM, jenže djpw chce alespoň 3 znaky, a Alphard tu jednou řešil, jestli se to sloňuje "bez AM_a" nebo "bez AMa" :)

omlouvám se za offtopic.
t4nn3r
Profil *
Jako osobne se priklanim k zapisu [#5] fuckin. Nesporna vyhoda deklarace promennych pomoci public,private,protected. Da se tady vyuzivat dedicnost a navic u kazde promenne je hned jasne co je zac (staci se mrknout na zacatek tridy ..)
gardener
Profil
Nemohu si pomoci, ale pokud zapisi takto>>
var $host;
var $user;
var $db;
var $password;
	
function __construct() {
if ($_SERVER["SERVER_ADDR"]=="127.0.0.1")
{
  $host = 'localhost';
  $user = 'root';
  $db = 'bekera_shop';
  $password = 'password';		
}
else	
{
  $host = 'localhost';
  $user = 'root';
  $db = 'bekera_shop';
  $password = 'password';
}


Nemohu pristoupit ani k jedne z prmennych, takze se do DB nepripojim.
Majkl578
Profil
Pro přístup k členským proměnným objektu se používá proměnná obsahující instanci a šipka.
V metodě objektu tedy takto:
$this->host = 'localhost';

Atd.
gardener
Profil
To jsem jiz zkousel, viz>>
  this->host = 'localhost';
  this->user = 'root';
  this->db = 'bekera_shop';
  this->password = 'password';


Ale kompilator mi to nevzal.
gardener
Profil
Pardon, moje chyba..nepouzival jsem znak promenne.
AM_
Profil
Přesně tak. Navíc jak jsme zmínili, var dělá spíš zmatek než užitek, dej si tam raději "private". Zkusil bych někde nastudovat něco o PHP5 OOP a neokoukávat to ze zastaralých skriptů, to tě kvalitní kód psát nenaučí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: