Autor | Zpráva | ||
---|---|---|---|
Miri Profil * |
#1 · Zasláno: 13. 3. 2012, 08:05:33
Ahoj snažím se udělat něco jako tohle a nedaří se mi.
class HlavniTrida { var $jmeno, $prijmeni; fuction __constuct($jmeno, $prijmeni){ $this -> jmeno = $jmeno; $this -> prijmeni = $prijmeni; } } class VedlejsiTrida extends HlavniTrida{ fuction vypisJmenoPrijmeni(){ return $this -> jmeno.$this -> prijmeni; } } $hlavniTrida= new HlavniTrida("Vaclav","Marny"); $vedlejsiTrida= new VedlejsiTrida; echo $vedlejsiTrida->vypisJmenoPrijmeni(); Takhle by to měla asi fungovat (psal jsem to z ruky takže tam budou i nějaké překlepy těch si prosím nevšímejte). Vím že ta konstrukce tříd je špatná a proto se ptám jak bych měl docílit nějaké takovéhle fungčnosti. Předem díky za opdověd Míra |
||
Alphard Profil |
#2 · Zasláno: 13. 3. 2012, 08:26:14
$vedlejsiTrida= new VedlejsiTrida("Vaclav","Marny"); echo $vedlejsiTrida->vypisJmenoPrijmeni(); var je stará konstrukce z PHP 4.
|
||
Ugo Profil |
#3 · Zasláno: 13. 3. 2012, 08:35:18
jestli dobře chápu co chceš, tak toho takhle (dědičností) nikdy nedocílíš. je to míchání objektů a tříd - objekt je instance třídy o kterém třída (definice objektu bych to tady asi nazval .. nesprávně) neví, jediné jak dostat hodnoty proměnných přes dědičnost dál je, nadefinovat je ( public $jmeno = "Vaclav"). Pro tebe bude nejlepší asi předávat si druhý objekt jako parametr té funkci vypisJmenoPrijmeni
<?php $hlavni = new HlavniTrida('Vaclav','Marny'); $vedlejsi = new VedlejsiTrida(); $vedlejsi->vypisJmenoPrijmeni($vedlejsi); /* ... */ function vypisJmenoPrijmeni(HlavniTrida $hlavni) { return $hlavni->jmeno.$hlavni->prijmeni; } |
||
Bertram Profil |
#4 · Zasláno: 13. 3. 2012, 15:45:27
Miri:
Ahoj, práce s tvými objekty podle #2 proběhne pravděpodobně podle tvého očekávání, ikdyž by to chtělo konkrétní příklad využití, protože na těchto třídách se dá jen těžko pochopit proč metoda vypisJmenoPrijmeni() je až v poděděné třídě. Tvůj způsob probíhá tak, že se vytvoří objekt z třídy HlavniTrida kde se mu v konstruktoru přiřadí do vlastností jmeno a prijmeni hodnoty, které mu předáváš při vytváření objektu. Ale při vytváření objektu z třídy VedlejsiTrida se dědí od třídy HlavniTrida, což s objektem vytvořeným s této třídy v předešlém kroku nemá nic společného, jen stejný předpis (třídu) z které se vytváří. A protože nepředáváš v (do) konstruktoru žádné parametry, proběhne tento konstruktor asi takto, $this->jmeno = null; $this->prijmeni = null; |
||
_construct Profil * |
#5 · Zasláno: 14. 3. 2012, 17:40:55
konkrétní příklad využití
<?php class MyDirectoryIterator extends DirectoryIterator { public $imageInfo; public $thumbCache;// chmod 777 public $thumbRes;// image resolution of thumbnails public $thumbQuality;// quality parameter of jpeg public $log = array(); public function __construct($path, $thumbCache = './cache/', $thumbRes = array('width' => 128,'height' => 96), $thumbQuality = 50) { if (extension_loaded("gd")) { parent::__construct($path); $this->thumbCache = $thumbCache; $this->thumbRes = $thumbRes; $this->thumbQuality = $thumbQuality; } else { $this->log[] = 'Extension "gd" not loaded. MyDirectoryIterator failed.'; exit; } } public function getFormatSize(){ $Size = $this->getSize(); if($Size == 0){ return("0 Bytes"); } $sizeName = array(" Bytes"," KB"," MB"," GB"," TB"," PB"," EB"," ZB"," YB"); return round($Size/pow(1024,($i=floor(log($Size,1024)))),2).$sizeName[$i]; } public function getLog() { $Dump = "<pre>\n"; $Dump.= print_r($this->log, TRUE); $Dump.= "</pre>\n"; return $Dump; } public function isImage(){ if ($this->imageInfo = getimagesize($this->getPathname())) { return true; } else { return false; } } public function getThumbnail(){ $thumbPathname = $this->thumbCache.md5($this->current()); if (file_exists($thumbPathname)) { $this->log[$this->getBasename()] = 'Thumbnail exist.'; return $thumbPathname; } else { if ($this->imageInfo) { $this->log[$this->current()] = $this->imageInfo; switch($this->imageInfo[2]){ case'1': $imageResource = imagecreatefromgif($this->getPathname()); break; case'2': $imageResource = imagecreatefromjpeg($this->getPathname()); break; case'3': $imageResource = imagecreatefrompng($this->getPathname()); break; case'15': $imageResource = imagecreatefromwbmp($this->getPathname()); break; case'16': $imageResource = imagecreatefromxbm($this->getPathname()); break; default: $this->log[] = 'ImageResource failed.'; return false; } if ($this->imageInfo[0] > $this->imageInfo[1]) { $Coefficient = $this->thumbRes['width'] / $this->imageInfo[0]; } else { $Coefficient = $this->thumbRes['height'] / $this->imageInfo[1]; } $thumbWidth = round($this->imageInfo[0] * $Coefficient); $thumbHeight = round($this->imageInfo[1] * $Coefficient); $thumbResource = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresampled($thumbResource, $imageResource, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $this->imageInfo[0], $this->imageInfo[1]); if(imagejpeg($thumbResource, $thumbPathname, $this->thumbQuality)) { $this->log[$this->getBasename()] = 'Thumbnail Succeed.'; return $thumbPathname; } else { $this->log[] = 'Imagejpeg failed. No space left on the device or insufficient privileges?'; return false; } } else { $this->log[] = 'ImageInfo failed.'; return false; } } } } $iterator = new MyDirectoryIterator('./images/'); print '<h2>Directory: '.$iterator->getPath().'</h2>'."\n"; foreach ($iterator as $item) { if($item->isImage()){ print '<a href="'.$item->getPathname().'"><img src="'.$item->getThumbnail().'" alt="'.$item->current().'" title="'.$item->current().' '.$item->getFormatSize().'" /></a>'."\n"; } } print $iterator->getLog(); ?> |
||
Časová prodleva: 11 let
|
0