| 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: 14 let
|
|||
0