Autor Zpráva
Miri
Profil *
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
$vedlejsiTrida= new VedlejsiTrida("Vaclav","Marny");
echo $vedlejsiTrida->vypisJmenoPrijmeni();

var je stará konstrukce z PHP 4.
Ugo
Profil
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
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;
a proto nedojde k žádnému chybovému hlášení, ale ani k vypsání požadovaného jména.
_construct
Profil *
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();
?>

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0