Új hozzászólás Aktív témák
-
Speeedfire
nagyúr
Üdv!
Kis oop gondom van. Jelenleg a bevezetés a php5 programozásba könyvet forgatom a kezeim között, adott egy ilyen sor egy osztályon belül:
echo "Szia {$this->nevLekerdezes()}!<br />";
echo 'Szia '.{$this->nevLekerdezes()}.'!<br />';Az első sor szintaktikaileg helyes, de a másik már nem. Mi a gond vele? Illetve a {} mire való itt? A könyv erre nem tér ki...
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Még most sem jöttem rá pontosan mi az a {}, ellenben anélkül megy rendesen.
echo 'Szia '.$this->nevLekerdezes().'!<br />';A könyvben csak az első sor van, ellenben én nem így szoktam az echo-t print-et használni:
echo ""; print "";
hanem csak sima aposztrófokkal
echo ''; print '';Megszoktam már ezt a szintaktikát.
[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Ismét egy kis oop kérdés lenne. A könyvben adott egy kódrész:
class TulajdonsagObjektum {
private $_tulajdonsagok = array (
'nev' => null,
'szuletesidatum' => null
);
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonosnev, $ertek) {
if(!array_key_exists($tulajdonosnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonosnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonosnev . 'Beallitas'), $ertek);
}
else {
$this-> _tulajdonsagok[$tulajdonosnev] = $ertek;
}
}
function szuletesidatumBeallitas($szd) {
if(strtotime($szd) == false) {
throw new Exception('A szuletesi datumnak egy ervenyes naptari napnak kell lennie!');
}
else {
$this->_tulajdonsagok['szuletesidatum'] = $szd;
}
}
function koszontes() {
echo 'Szia! '.$this->nev.' vagyok! '.$this->szuletesidatum.' -an/en szulettem';
}
}
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985. 08. 27.';
$obj->koszontes();
$obj->szuletesidatum = 'piros';A könyv szerint ki kellene írni a Szabit és a születési dátumot és utána egy hibaüzenetet, hogy a piros nem megfelelő dátum.
Ehelyett az egészet egy errorba rakja nekem.Fatal error: Uncaught exception 'Exception' with message 'A szuletesi datumnak egy ervenyes naptari napnak kell lennie!' in D:\munka\web\!!!oop\index.php:80 Stack trace: #0 [internal function]: TulajdonsagObjektum->szuletesidatumBeallitas('1985. 08. 27.') #1 D:\munka\web\!!!oop\index.php(71): call_user_func(Array, '1985. 08. 27.') #2 D:\munka\web\!!!oop\index.php(94): TulajdonsagObjektum->__set('szuletesidatum', '1985. 08. 27.') #3 {main} thrown in D:\munka\web\!!!oop\index.php on line 80
php 5.3.0 van fent.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Akkor már tudom Sk8erPeter mire célzott a gányolt kóddal...
Így módosítottam a végét, de csak a hibát írja ki. A helyes részt nem, pedig az 1985.08.27. helyes dátum formátum elvileg.
try {
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985. 08. 27.';
$obj->koszontes();
$obj->szuletesidatum = 'piros';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}Caught exception: A szuletesi datumnak egy ervenyes naptari napnak kell lennie!
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
A könyv végére sírni fogok ezektől a dolgoktól...
Kivettem a piros részt is és így it hibát ír ki, szóval máshol lesz a gond szerintem. Heggesztem még a kódot, de így kicsit ciki ha már a könyvben sem jól van írva...
Ha ezt átírtam true-ra akkor jó volt.
if(strtotime($szd) == false) {[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Akkor a könyvben nem értem miért így volt.
Illetve ezt sem pontosan értem:
return call_user_func(array($this, $tulajdonosnev . 'Beallitas'), $ertek);
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));Itt a Beallitas és Lekerdezes sztingeket mire használja?
[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Bevezetés a php5 programozásba. Igazából az oop miatt érdekelt a könyv, azt írták sokan, hogy nagyon jó...
jeges:
De igen, el lett írva. Ellenben én nem nagyon látom ilyen opciókat, jobban mondva nem látom értelmét ezekenk a kifejezéseknek a függvények szempontjából.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
A példa a __set() és a __get() parancsokat akarja bemutatni, hogy a __get() megnézni és ellenőrzi a dolgokat aztán a __set() pedig beállítja, csak közben még mást is implementáltak bele, így már kicsit több infó van benne mint kellene.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz PazsitZ #6355 üzenetére
Ez az, hogy a példa programban nincs olyan tulajdonság, hogy xyz beallítas vagy xyz lekerdezes. [link]
Ezért nem értem én, hogy mire akar ott hivatkozni. Vagy így automatikusan létre akarja hozni?
Sk8erPeter: Igen, én is úgy érzem, hogy kicsit túl akarja bonyolítani az elején a könyv ezt. Holott a fejezetet címe bevezetés az oop elméletbe...a következő fejezet lenne az ami a magic methodokkal foglalkozna elméletileg....Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6380 üzenetére
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotEz nagyon hasznos volt. Főleg a vége, szóval beállítja az adott kérést.
Eddig csak azt tudtam, hogy a php alapból meghíva a __set() __get() függvényeket és ott keresi ha nincs meg egy adott függvény.Csak engem megzavart, hogy nem volt a példa programban olyan, hogy:
-tulajdonsagnevLekerdezes
-tulajdonsagnevBeallitasFotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Sk8erPeter #6387 üzenetére
Wamp-ot használok, de gondoltam meglesem ezt a appserver-t erre mit látok.
Php 6.0.0 dev. Ez mióta van, vagy mi lesz benne az újítás? Nekem ez most nagyon új infó, eddig erről nem tudom.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Brown ügynök #6391 üzenetére
Ez az, hogy én is csak rc-est láttam a php oldalán....5.3.6RC2 (03 Marchy 2011)
Az appserver oldalán meg ez van...
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6393 üzenetére
Igen azt én is észrevettem, hogy developer verzió, csak a hivatalos oldalon egy szó sem esik erről. Ha valóban készül akkor lehet tudni, hogy mik lesznek az újítások?
Most akkor lehet megint félreértettem valamit. Ha jól értettem akkor a függvény a __get() részben megnézni, hogy van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti ellekező esetben kivételt dob nekem.
class TulajdonsagObjektum {
private $_tulajdonsagok;
public function __construct() {
$this->_tulajdonsagok = array();
$this->_tulajdonsagok['nev'] = null;
$this->_tulajdonsagok['szuletesidatum'] = null;
}
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonsagnev, $ertek) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonsagnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonsagnev . 'Beallitas'), $ertek);
}
else {
$this-> _tulajdonsagok[$tulajdonsagnev] = $ertek;
}
}
function szuletesidatumBeallitas($szd) {
if(strtotime($szd) == false) {
throw new Exception('A szuletesi datumnak egy ervenyes naptari napnak kell lennie!');
}
else {
$this->_tulajdonsagok['szuletesidatum'] = $szd;
}
}
function koszontes() {
echo 'Szia! '.$this->nev.' vagyok! '.$this->szuletesidatum.' -an/en szulettem!<br/>';
}
}
try {
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985-08-27';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Hiba: ', $e->getMessage(), "\n";
}Ugye itt a __get() második if ágában van a vizsgálata ennek. Vagy te arra az egy db szuletesidatumBeallitasra gondoltál? Mert abban az esetben valóban van ilyen de a többi esetben nincs ilyen típusú függvény.
Viszont most megint felmerült egy kérdés a fejemben? Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is. Akkor már a kivételkezelés az elején végbe menne.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Sk8erPeter #6395 üzenetére
Sk8erPeter & Tele von Zsinór: Köszönöm mindkettőtöknek, így utólag belegondolva pedig logikus és érthető is a dolog, nem értem miért nem értettem meg eddig.
Úgy néz ki nálam a hülyülés már korábban kezdődik mint kellene...Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Ismét oop, ismét szívás van vele. Konkrétan a __destruct() függvénnyel.
Elvileg a kód ha jól tudom amikor végzett az objektumokkal akkor megvizsgálja, hogy van-e __destruct() rész ha van akkor végrehajtja.
Jelen esetben van, célja elvileg az lenne hogyha futás közben módosult valami adat akkor azt visszaírja az adatbázisba. De ez sajnos nem akar összejönni."Real-time"-ban átírja az adatot, de nem módosítja...illetve ha beillsztek még egy try() catch() blokkot akkor errort is dob...
Ma a kód az előzőnek a tovább bővített változata:
class Felhasznalo2 {
private $_tulajdonsagok;
private $_hAB;
private $_modositottTulajdonsagok;
public function __construct($felh_azon) {
$this->_tulajdonsagok = array();
$this->_modositottTulajdonsagok = array();
$this->_tulajdonsagok['azon'] = null;
$this->_tulajdonsagok['felhnev'] = null;
$this->_tulajdonsagok['valodinev'] = null;
$this->_hAB = mysql_connect('localhost','root','');
if(!is_resource($this->_hAB)) {
throw new Exception('Az adatbazis kapcsolat nem hozhato letre!');
}
$kapcsolodas = mysql_select_db('oop', $this->_hAB);
if(!$kapcsolodas) {
throw new Exception('Az adatbazis nem hasznalhato');
}
$sql = 'select * from felhasznalo where azon = '.$felh_azon.'';
$eredmeny = mysql_query($sql, $this->_hAB);
if(!mysql_num_rows($eredmeny)) {
throw new Exception('Az adatbazisban nincs '.$felh_azon.' azonositoju felhasznalo');
}
$sor = mysql_fetch_assoc($eredmeny);
$this->_tulajdonsagok['azon'] = $sor['azon'];
$this->_tulajdonsagok['felhnev'] = $sor['felhnev'];
$this->_tulajdonsagok['valodinev'] = $sor['valodinev'];
}
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonsagnev, $ertek) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonsagnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonsagnev . 'Beallitas'), $ertek);
}
else {
if($this->_tulajdonsagok[$tulajdonsagnev] != $ertek && !in_array($tulajdonsagnev, $this->_modositottTulajdonsagok)) {
$this->_modositottTulajdonsagok[] = $tulajdonsagnev;
}
$this->_tulajdonsagok[$tulajdonsagnev] = $ertek;
}
}
function azonBeallitas($ertek) {
throw new Exception('A felhasznalodi azonositot nem lehet megvaltoztatni!');
}
function koszontes() {
echo 'Szia! '.$this->valodinev.' vagyok! A felhasználói azonositom '.$this->azon.'! A nickem '.$this->felhnev.' !<br/>';
}
function __destruct() {
if(sizeof($this->_modositottTulajdonsagok)) {
$sql = 'update felhasznalo set';
$utasitasBeallitas = array();
foreach($this->_modositottTulajdonsagok as $tul) {
$utasitasBeallitas[] = $tul .' = ' . $this->_tulajdonsagok[$tul];
}
$sql .= join(', ', $utasitasBeallitas);
$sql .= 'where azon = '. $this->azon;
$hEredm = mysql_query($sql, $this->_hAB);
}
mysql_close($this->_hAB);
}
}
try {
$obj = new Felhasznalo2(1);
$obj->valodinev = 'Tóth Szabi';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Hiba: ', $e->getMessage(), "\n";
}Ha hozzáfűzöm még ezt is:
try {
$obj2 = new Felhasznalo2(2);
$obj2->koszontes();
}
catch (Exception $e) {
echo 'Hiba: ', $e->getMessage(), "\n";
}Akkor hibát ír ki nekem:
Warning: mysql_query(): 3 is not a valid MySQL-Link resource in D:\munka\web\!!!oop\index.php on line 279
Warning: mysql_close(): 3 is not a valid MySQL-Link resource in D:\munka\web\!!!oop\index.php on line 282Az sql tábla:
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Speeedfire #6401 üzenetére
Meglett a hiba, nem a kódban volt a gond hanem az update résznél a foreach ciklusban.
Szintaktikailag a mysqlnek nem felelt meg, csak erről nem dobott nekem hibát.
Helyesen a foreach:foreach($this->_modositottTulajdonsagok as $tul) {
$utasitasBeallitas[] = $tul .' = \'' . $this->_tulajdonsagok[$tul]. '\'';
}Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6403 üzenetére
Igen én is észrevettem, hogy akkor módosúlt az adatbázisban az adat amikor már újra lett töltve az oldal.
Az utolsó mondatot nem teljesen értem (hála a perfekt angolomnak). A lényege ha jól értem, hogy nem szerencsés kivétel kezelést írni a __destrucktorban, mert fatal error is lehet a vége.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Mennyire fontos használni az osztályokon belül a public kulcsszót? Ha jól tudom akkor alap esetben ha nem írok oda semmit sem akkor is public.
pl:class Pelda {
public $valami;
public $megvalami;
public function Ertek() {
return $this->valami * $this->megvalami;
}
}Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Brown ügynök #6406 üzenetére
Nagyon megy ez nekem.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6408 üzenetére
Igazából logikusnak is tűnik, mivel a __destruct() csak a objektum "életének" a végén fog megjelenni. Gondolom én, hogy ez lehet az oka.
Más:
Ugye a gyerek osztályban a parent::[hivas]-al lehet meghívni a szülő metódusait.
Ilyen meghívja az egészet, de ha módosítani akarom akkor mi van? Már a szülőben úgy alakítsam ki a metódust, hogy könnyen át lehessen alakítani? A bővítés ugye nem egy nagy dolog, mert csak meghívom a parent-at és kiegészítem vele.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Hagynod kellett volna szerintem a 4-est és egyből azt 5-össel kezdeni.
Az alapokra jó a 4-es is, csak amikor 5 alatt fejlesztesz és sok függvényre errort dob akkor már kicsit zavaró, hogy x függvényt feleslegesen tanultál meg, vagy épp az 5 alatt egyszerűbb megcsinálni valamit.Más:
Erre nekem miért dob hibát?
class Teglalap {
public $magassag;
public $szelesseg;
public function __construct() {
$this->szelesseg = $szelesseg;
$this->magassag = $magassag;
}
public function teruletSzamitas() {
return $this->magassag * $this->szelesseg;
}
}
class Negyzet extends Teglalap {
public function __construct($meret) {
$this->magassag = $meret;
$this->szelesseg = $meret;
}
public function teruletSzamitas() {
return pow($this->magassag, 2);
}
}
$objNegyzet = new Negyzet(7);
echo $objNegyzet->teruletSzamitas();
$objTeglalap = new Teglalap();
$objTeglalap->magassag = 10;
$objTeglalap->szelesseg = 5;
echo $objTeglalap->teruletSzamitas();konkrétan ezt:
Notice: Undefined variable: szelesseg in D:\munka\web\!!!oop\index.php on line 382
Notice: Undefined variable: magassag in D:\munka\web\!!!oop\index.php on line 383Ezekre mutat a hiba:
public function __construct() {
$this->szelesseg = $szelesseg;
$this->magassag = $magassag;
}[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
A Teglalap osztálynál nem kell megadni paramétert, csak a Negyzet osztálynál.
Elvileg nem kellene így szólnia, mivel utána már definiálom a szelesseges és a magassagot.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Fő a változatosság megint tökön szúrt ez a könyv az interfészekkel...
Egy egyszerű interfészről lenne szó, de már az interfész definiálásánál fatal errort dob nekem:
interface Nyithato {
abstract function nyitas();
abstract function zaras();
}
class Ajto implements Nyithato {
private $_kulcsrazart = false;
public function nyitas() {
if($this->_kulcsrazart) {
echo 'Az ajtó nem nyitható ki, kulcsra van zárva';
}
else {
echo 'katt...<br />';
}
}
public function zaras() {
echo 'Bamm!!<br />';
}
public function ajtoZaras() {
$this->_kulcsrazart = true;
}
public function ajtoNyitas() {
$this->_kulcsrazart = false;
}
}
class BefottesUveg implements Nyithato {
private $tartalom;
public function __construct($tartalom) {
$this->tartalom = $tartalom;
}
public function nyitas() {
echo 'A befőttesüveg nyitva van!<br />';
}
public function zaras() {
echo 'A befőttesüveg zárva van!<br />';
}
}
function valamitKinyit (Nyithato $obj) {
$obj->nyitas();
}
$objAjto = new Ajto();
$ojbBefottesuveg = new BefottesUveg('lekvár');
valamitKinyit($objAjto);
valamitKinyit($objBefottesuveg);Fatal error: Access type for interface method Nyithato::nyitas() must be omitted in D:\munka\web\!!!oop\index.php on line 465
Oda jelzi ahol az abstact metódusok vannak.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz DeltaPower #6420 üzenetére
Nem változott semmi sem.
Ugyan az a hiba így is:interface Nyithato {
abstract public function nyitas();
abstract public function zaras();
}Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6422 üzenetére
Akkor megint a könyvben lesz valami bibi:
...Mivel a megvalósításuk részleteit egyáltalán nem határozzuk meg, ezeket a függvényeket (az abstract kulcsszó segítségével) absztrakt metódusként deklaráljuk. Ez tudatja a PHP-vel, hogy az interfészt megvalósító osztályok felelősek e függvények implementálásáért. Ha elmulasztjuk megadni az intrefész összes absztrakt metódusának konkrét megvalósítását, akkor a PHP futásidejű hibát generál. Mindez azt jelenti, hogy nem választjuk ki, hogy mely absztrakt metódusokat kívánjuk kidolgozni...Kivettem és tényleg jó.
---
Akkor ezzel mit lehet kezdeni ebben az esetben, hogy lehessen használni a Teglalap-ként és Negyzet-ként is?Lényegében kiszámolja, csak ugye dobja is a hibát előtte. Ilyenkor jobb ha elhagyom a szülőből a __construct() metódust? A gyereknél úgy is definiálom majd.
DeltaPower: Lényeg, hogy megvan a hiba oka.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6425 üzenetére
Értem, így már akkor kerek a dolog.
Épp azt írom, hogy nem akarom kétszer megírni. A szülőben elakarom hagyni és csak a gyerekben akarom meghagyni. Így elvileg ugyan úgy működni, de mégsem dobna notice-t.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Azt kell mondjam mindegyikben van hiba...
Anno a php4 24 óra alattal kezdtem alapoknak jó, de semmi extra. Most az oop miatt a bevezetés a php5 programozásba olvasom, elég jó de ebben is vannak hibák.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Létezik php alá uml segítő program? Jelenleg az uml résznél járok, elvileg az officeban is van (visio), csak épp nem látom sehol sem. Pedig felraktam....
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Speeedfire #6430 üzenetére
Az argouml-t ajánlották ez elvileg már kezeli a kódgenerálást is. Meglesem.
Frigo: Észre sem vettem, hogy írtál.
Az mégjobb, mert netbeans-t használok én is.
Kell ezt valahol aktiválni vagy valami csinálni vele?[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Onnan most elmentem egy másik helyre.
Ott volt ez. -> [link]Ez itt a fontos link. -> [link]
Lap alján csak le kell tölteni az uml-est és kicsomagolni a netbeans könyvtárba utána már ott is van a projektek között. Még samle is van. :
Köszi a linket, így nem kell 50 programot legalább megnyitni 1 alatt el lehet végezni mindent.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Ismét az uml-lel kapcsolatban kérdeznék tőletek.
A netbeansben akartam egy feladatot megoldani, szépen meg is csináltam ellenben 2 apró dologgal van gondom. A könyv azt írja, hogy az egymáshoz kapcsolódó osztályokat aggregálni kellene, de ilyen opció nincs netbeansben. Illetve be kellene állítani a multiplitást is. Ez összejött 2 osztállyal a 3.nál már nem sikerült nem engedi beállítani.
Az osztályoknál csak ezek az opciók vannak:
generalization, implementacion, association, containment, dependency és link comment. Én itt az association-t próbáltam meg, nem tudom az-e a megfelelő.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Mit értesz az alatt, hogy leszedni?
Htaccess nélkül nem fog menni ha arra gondolok amire valószínűleg te is.
a .htaccess fájl tartalma //engedélyezni kell az apachban, vagy abban amiben használod
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z-]+)$ ?oldal=$1 [QSA,L]
</IfModule>A php fájlban meg ahol meg akarod jeleníteni az oldalt oda ez kell:
if (!isset($_GET['oldal'])) {
include ("kategoria.php");
} else {
$id = (isset($_GET['oldal']) && !empty($_GET['oldal'])) ? ltrim($_GET['oldal'], './') : 'error';
if (file_exists("$id.php")) {
include ("$id.php");
} else {
header('Location: ../errors/404.html');
}
}Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6438 üzenetére
Igaz, nem volt pontos a megfogalmazás.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Üdv!
Ki melyik webshop motort ajánlaná?
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Speeedfire #6470 üzenetére
Látom mindenki maga fejleszti ezeket.
Közben vagy opencart vagy prestashop lesz az alapja az egésznek.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Találtam egy magyar symfony2-es blogot. [link]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Brown ügynök #6486 üzenetére
Hopp, te elég up-to-date vagy. Ennyire még nem ástam bele magamat, bár egy másik fórumon meg le akarnak beszélni....
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Sk8erPeter #6488 üzenetére
Itt olvashatsz róla az 5. hsz-től.
Az írják, hogy lassú és nagyon nyakatekert...
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6490 üzenetére
Van benne valami.
Sk8erPeter: Érdekes téma!
Én anno csak a .htaccess-be írtam be mindent, jópár sor lett a végére...
Utána néztem meg a nagyobb cms-eket, ki hogy használja és megpróbáltam lemásolni. Azóta azt használom.
A .htaccess-ben csak 1 sor van, adott egy php fájl ami a kéréseket dobálja a megfelelő helyre. A keresőbarát url-ek meg az adatbázisban vannak. Amelyik táblában az url-ek vannak cachelve van. Elvileg nagy sebesség különbség szerintem nincs.
pumatom: A php kód végére rakj egy header() parancsot. A paramétere meg legyen maga a kép.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz RedSign #6495 üzenetére
Link nincs mivel, saját magam oldottam meg. Nem a legszebb megoldás, de működik.
.htaccess fájl tartalma:
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?phpoldal=$1 [QSA,L]
RewriteRule ^rss.xml$ rss.php [L]
</IfModule>A php fájl tartalma:
<?php
require_once 'config.php';
require_once 'db.php';
$subdir = substr(realpath(dirname(__FILE__)), strlen(realpath($_SERVER['DOCUMENT_ROOT'])));
$tmp_array = explode('?', trim($_SERVER['REQUEST_URI']));
$uri = str_replace($subdir, '', $tmp_array[0]);
$uri = ltrim($uri, '/');
if ($basehref == 'http://localhost/!!!szapar.hu/') {
$uri = str_replace("!!!szapar.hu/", "", $uri);
}
$valogatas = "select * from szapar_alias where eng = '".$uri."' ";
if (!mysql_query($valogatas,$con)) {
die('Hiba: ' . mysql_error());
}
$valogat = mysql_fetch_assoc(mysql_query($valogatas));
$valogatsor = mysql_num_rows(mysql_query($valogatas));
if (!empty($valogat['url']) and isset($valogat['url'])) {
$valogat = explode('&',$valogat['url']);
$i= 0;
foreach ($valogat as $ertek) {
if ($i != 0) {
parse_str($ertek);
}
$i++;
}
include $valogat[0];
}
elseif (($valogatsor == 0) and (empty($uri))) {
include 'tartalom.php';
}
else {
include './inc/errors/404.php';
}
require_once './inc/lezar.php';
?>sql része:
CREATE TABLE IF NOT EXISTS `szapar_alias` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(200) CHARACTER SET latin1 NOT NULL,
`eng` varchar(150) CHARACTER SET latin1 NOT NULL,
`tid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `url` (`url`),
KEY `tid` (`tid`),
KEY `eng` (`eng`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=197 ;Ahova a tartalmakat beakarom hívni ott hívom meg a valogat.php-t ami meghívja az adott fájlokat és tartalmakat.
A neveken ugye tudsz változtatni.
Elég béta állagú a dolog, lenne még mit igazítani rajta, de egyelőre kifogytam az ötletekből...
[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Hülye kérdés, de hogy lehet egy programozói állásinterjúra felkészülni? Lesznek tesztek is.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
Csak egy példa, hogy én mit használok. Igaz szerintem erőforrás tekintetben nem a legjobb. Kellene még egy másik tábla, ahol el lenne tárolva ez mind, így lenne egy úgymond cachelt tábla.
<?php
include_once 'config.php';
echo '
<div class="cimkefelho">
<br />
<h2>Cimkefelhő</h2>
<p>
';
$cimke = mysql_query("select tags from linkek_tartalom") ;
$osszes=0;
while ($cimke2 = mysql_fetch_array($cimke) ) {
$tags = str_replace(" ","",explode( ',', $cimke2['tags']));
foreach ($tags as $cimkek) {
$Cimke[] = $cimkek;
$osszes++;
}
}
$Cimke = array_count_values($Cimke);
shuffle_assoc($Cimke);
foreach ($Cimke as $Tags => $mennyi) {
$ertek = round($mennyi/$osszes,1)+1;
echo '<a title="'.$Tags.'" style="font-size:'.$ertek.'em" href="cimke='.angol2($Tags).'" >'.$Tags.'</a> ' ;
}
unset($Cimke);
echo '
</p>
</div>
';
?>Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Sk8erPeter #6506 üzenetére
Ezt a bejegyzést meg észre sem vettem.
Miért nem használod fel a $_GET['phpoldal'] változót? Úgy értem, akkor minek adod át ennek a query stringnek a címet?
Így láttam célszerűnek anno, minden eshetőségre fel akartam készülni. Lehet, hogy pont nem a legjobb megoldás rá. Majd egyszer lehet nekiesek megint, jobban átgondolva az egészet.
http://localhost/!!!szapar.hu/
Ehelyett meg létrehozhatnál egy bejegyzést a hosts fájlban, meg apache-beállításokban egy VirtualHost-ot, és lehetne a címe http://szapar.local Így azé' szebb, meg nem kell annyit pötyögni a cím beírásához.
Tudom, csak nincs kedvem mindegyiket beírni. Nem mintha sokáig tartana, csak localhoston annyira nem zavar a dolog. Ha meg felkerül a serverre akkor meg már édes mindegy.$valogatas = "select * from szapar_alias where eng = '".$uri."' ";
Itt azért az $uri változót nem ártana escape-elni, az SQL Injection elkerülése érdekében!
$i= 0;
foreach ($valogat as $ertek) {
if ($i != 0) {
parse_str($ertek);
}
$i++;
}
Ezt nem is értem, minek csinálod, ha utána egyáltalán sehol nem használod fel az $ertek változót?
Vagy felhasználod, csak valami include-olt fájlban? Vagy csak benne maradt?
Erre eddig nem is gondoltam, tényleg egy biztonsági rés. Ki is javítottam már.
Már hogyne használnám fel az $ertekeket. Azok az oldalnak a "$get paraméterei", a script végén hívom meg a php fájlokat amikben felhasználom.if (!mysql_query($valogatas,$con)) {
die('Hiba: ' . mysql_error());
}
Itt a die() helyett érdemesebb lenne inkább valami felhasználóbarátabb hibaüzenetet, hogy nem elérhető az adatbázis, látogasson vissza később. Ráadásul a felhasználónak semmi köze a konkrét hibaüzenethez. Nem célszerű kiírni! Főleg, hogy nem is túl szép.
Az ilyen jellegű hibákat amúgy nagyon faszán le lehet kezelni kivételkezeléssel, ha valami kritikus jellegű hibád van, azonnal dobsz egy kivételt, hogy ne is futkorásszon tovább a kód, nem is kell bonyolult és ronda if-else blokkokat csinálni, egyszerűen valahol elkapod a kivételt, megfelelő módon kezeled, és kész.
Hogy érted azt, hogy nem célszerű kiírni? Beszélgettünk már a kivétel kezelésről, de amikor a kód készült azt sem tudtam mi az a try() meg catch() blokk.if (!empty($valogat['url']) and isset($valogat['url']))
Ennek a feltételvizsgálatnak így nem sok értelme van, itt elég lenne a !empty() részt vizsgálni, nyilván ha nem üres a változó (nem is NULL, nem is üres string, stb.), akkor be van állítva, tehát a második feltétel már felesleges. Sőt, itt előbb célszerű lenne inkább megvizsgálni, hogy van-e kapott eredményhalmaz, vagy sem, ha már úgyis lekérdezed a kapott sorok számát a mysql_num_rows() függvénnyel.
Valami oka volt, hogy így írtam. De már nem tudom, hogy mi volt az.Na, a többi részéhez most nem volt türelmem.
Kössz!"Amelyik táblában az url-ek vannak cachelve van."
Hogyan bírod rá így külön az adatbázist, hogy cache-elje? Tudtommal default cache-eli, indexeléssel lehet esetleg segíteni a lekérdezés gyorsaságát.
Az indexelésre gondoltam, csak a szakzsargon nem mindig jut eszembe.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Speeedfire
nagyúr
válasz Sk8erPeter #6543 üzenetére
Ahogy biker is írja vagy egy cronnal lenne futtatva a dolog és annak a kimenete lenne egy táblába rakva és a fő oldalon az lenne lehívva. Vagy minden egyes módosítás, új tartalom feltöltéskor lenne generálva a tábla.
Nem azzal van a gond, hogy nem tudom átírni, hanem hogy localhost alatt nem fordítok rá akkor figyelmet. Nincs annyi projekt, hogy külön ezeket kezeli kelljen.
Értem, igazad van ezzel kapcsolatban. Erre még nem gondoltam, mindig csak az volt a fő szempont, hogy én tudjam mit hol rontok el.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Új hozzászólás Aktív témák
- Samsung Galaxy S23 Ultra - non plus ultra
- Milyen billentyűzetet vegyek?
- eBay-es kütyük kis pénzért
- Színészek hangjait lopta el egy AI-cég
- Skull and Bones - Egy hétig ingyen játszhatunk vele
- Ukrajnai háború
- Skoda, VW, Audi, Seat topik
- Linux kezdőknek
- Óra topik
- Ubiquiti hálózati eszközök
- További aktív témák...
- MSI MAG274QRF-QD QLED Gamer Monitor!27"/2k/165hz/1ms/Freesync-Gsync/Type C/Konzolhoz is/Beszámítás!
- Sennheiser Epos H3 White Gamer Fejhallgató Eladó!
- Hisense 50A6BG 4k Smart TV!50"/4k/DOLBY VISION/10bit/Game Mode/ALLM/Beszámítás!
- Dell S2421HN Full HD Led Monitor! 24"/1920x1080/IPS/75hz/Freesync/Fehér
- Dell S2721DS 2k Monitor!27"/IPS/2560x1440/75hz/Freesync-Gsync/Fehér/Beszámítás
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Promenade Publishing House Kft.
Város: Budapest