2016-06-09 9 views
1

Verzeihen Sie irgendwelche Fehler in der Sprache, ich versuche, Klassen zu lernen.Wie führe ich eine Methode/Funktion für eine Instanz aus einer nicht instanziierten Klasse aus?

Sobald ein Objekt instanziiert wurde, verstehe ich, dass Methoden aus dieser Klasse für mich verfügbar sind. Meine Frage ist, wie kann ich Methoden von einer anderen Klasse als der instanziierten auf dem Objekt ausführen?

Im Einzelnen:

class image { 
    public static function create() { 
     $image = new Imagick($file); 
     $image -> image::autoRotate($image); 
     ... 
    } 

    public static function autoRotate($image) { 
     ... 
    } 
} 

die Linie $ Bild -> Bild :: AutoRotate ($ image) ergibt den Fehler, und ich verstehe die Syntax und/oder mein Verständnis Schuld trifft. Kann mir bitte jemand helfen, das zu verstehen?

+2

brauchen Sie nicht '$ image->' Teil – Fabricator

+1

auch Klassenname sollte per Konvention geladen werden – Fabricator

Antwort

2

Da die Klasse image nicht tatsächlich eine Eigenschaft des Objekts $image ist, müssen Sie die Syntax nicht verwenden, um diesen Vorgang auszuführen. Da autoRotate() ist eine statische Funktion, kann es nur aus der Klasse Accessor image::autoRotate($image);

class image { 
    public static function create() { 
     $image = new Imagick($file); 
     image::autoRotate($image); // removed $image -> 
    ... 
    } 

    public static function autoRotate($image) { 
    ... 
    } 
} 
2

öffentliche statische Funktion von classname::funcname aufgerufen werden kann direkt aufgerufen werden, keine Notwendigkeit, zunächst ein Objekt instanziiert. In Ihrem Fall:

class image { 
    public static function create() { 
     $image = new Imagick($file); 
     image::autoRotate($image); 
     ... 
    } 

    public static function autoRotate($image) { 
     ... 
    } 
} 
1

Try Linie zu ersetzen ..

$image -> image::autoRotate($image); 

mit diesem ..

self::autoRotateImage($image); 

Verwandte Themen