Autor Zpráva
JohnyEnglish
Profil *
Dobrý den,
začínám se učit objektové programování v PHP a potřeboval bych zkontrolovat kód.

Mám kód který zapíše data do databáze -
class UlozObrazek{

   var $ip;
   var $user;
   var $rand;
   var $img;

   function save(){
      $this->sql = "INSERT INTO upload(jmeno,rand,ip,img) VALUES('".$this->user."','".$this->rand."','".$this->ip."','".$this->img."')";
      mysql_query($this->sql);
      return $this->Zprava = true;
      
  }

   

}



A vyvolávám ho -
$img = new UlozObrazek;
    $img->ip = $_SERVER['REMOTE_ADDR'];
    $img->user = $_SESSION['Loged_user'];
    $img->rand = rand('99999','99999999999');
    $img->img = AbsoluteUri;
    $img->save();



Myslím si že toto není nejlepší řešení, ale ani nejhorší :). Pokud by někdo mohl poradit co dělám kdyžtak špatně. Děkuji
happy
Profil
var $rand; -> "var"uz se uz nepoziva to bylo za casu php4 - misto toho se dava viditelnost (public, private, protect)

jinak nemusis ty veci nakhle nastavovat muzes normalne napsat

public $ip = $_SERVER['REMOTE_ADDR']; //omlouvam se tohle nejde myslel jsem ze nejdou prirazovat jen funkce ale nejdou i dynamicke veci.

nebo si je automaticky nastav v __construct (metoda co se automaticky spousti po vytvoreni instance)

pak udelas jen
img = new UlozObrazek;
$img->save();

$this->neco pouzivej jen kdyz si to neco ve tride definujes. to znamena kdyz chces globalne pozivat ve tride $this->sql tak si na zacatek tridy napis public $sql. ale pokud mas tu promenou jen pro tu jednu danou metodu save() tak to pis uplne normalne jak v klasicke funkci bez this ... proste jen $sql

<?php

class UlozObrazek {

   private $ip;
   private $user;
   private $rand;
   private $img;

  public function __construct() {
  	$this->ip = $_SERVER['REMOTE_ADDR'];
  	$this->user = $_SESSION['Loged_user'];
  	$this->rand = rand('99999','99999999999');
  	$this->img = AbsoluteUri;
  }
  
   public function save(){
      $sql = "INSERT INTO upload(jmeno,rand,ip,img) VALUES('".$this->user."','".$this->rand."','".$this->ip."','".$this->img."')";
      mysql_query($sql);
      return true;
      
  } 
}

$img = new UlozObrazek;
$img->save();
JohnyEnglish
Profil *
happy:
Aha, rozumím, díky :).
A co když budu chtít definovat něco pomocí toho $img->neco = "text" tak to pak bude jenom public $neco;? Díky
JohnyEnglish
Profil *
Bohužel mi to nějak nejde,

mám
class UlozObrazek {

   public $ip = $_SERVER['REMOTE_ADDR'];
   public $user = $_SESSION['Loged_user'];
   public $rand = rand('99999','99999999999');
   public $img = AbsoluteUri;

   public function save(){
      $this->sql = "INSERT INTO upload(jmeno,rand,ip,img) VALUES('".$this->user."','".$this->rand."','".$this->ip."','".$this->img."')";
      mysql_query($this->sql);
      return $this->Zprava = true;

  }

   

}


A hlásí to Parse error: syntax error, unexpected T_VARIABLE in D:\Projekty\sdilejte2\sdilejte\engine.php on line 22

a řádek 22 je public $ip = $_SERVER['REMOTE_ADDR'];
happy
Profil
upravil jsem prvni prizpevek.

do promenych nelze prirazovat funkce!!! public $rand = rand('99999','99999999999'); tohle proste nejde proto se to nastavuje vte metode construct. a bohuzel nejdou i ty dynamicke public $ip = $_SERVER['REMOTE_ADDR']; - osobne ani nevim proc tohle prozmenu nejde. jinak tam muzes veci prirazovat klasicky public $ip = 'neco';

jinak proste pokud chces nektere promene pouzivat mezi metodami ve tride tak na zacatku tridy vytvoris tu promenou pomoci treba private $ip; a pak v kterekoli metode ve tride muzes promene neco priraadit pomoci $this->ip = neco nebo ji treba vypsat pomoci echo $this->ip (zkus si misto toho this predstavit jmeno tridy)

pokud budes promene definovat jako public muzes knim pristupovat i mimo tridu. pokud jako private budou dostupne jen pro metody v ramci tridy

Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
JohnyEnglish
Profil *
Aha, super už to chápu. Díky moc :)

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: