Function mimo třídu – robotLoader ji nevloží
- nettolog
- Člen | 68
Zdravím. Chtěl jsem si stáhnout a vyzkoušet jednu třídu, která je v souboru a ten vypadá takto:
<?php
namespace Tinify;
const VERSION = "0.9.1";
class Tinify {
public static $key = NULL;
public static $appIdentifier = NULL;
public static $compressionCount = NULL;
public static $client = NULL;
public static function getClient() {
if (!self::$key) {
throw new AccountException("Provide an API key with Tinify.key = ...");
}
if (!self::$client) {
self::$client = new Client(self::$key);
}
return self::$client;
}
}
function setKey($key) {
Tinify::$key = $key;
Tinify::$client = NULL;
}
function setAppIdentifier($appIdentifier) {
Tinify::$appIdentifier = $appIdentifier;
}
function fromFile($path) {
return Source::fromFile($path);
}
function fromBuffer($string) {
return Source::fromBuffer($string);
}
function validate() {
try {
Tinify::getClient()->request("post", "/shrink");
} catch (ClientException $e) {
return true;
}
}
function compressionCount() {
return Tinify::$compressionCount;
}
Robotloader třídu vloží pokud ji potřebuji, to je v pořádku. Ale
vůbec nemůžu zavolat například setKey
(Call to undefined
function setKey()), je možné, že se robotloaderem ty functions nenačetly
nebo dělám někde chybu já?
V manuálu je postup:
Tinify\setKey('YOUR_KEY');
Například $t = new \Tinify\Tinify;
jde bez problému.
Editoval nettolog (31. 7. 2015 19:23)
- David Matějka
- Moderator | 6445
PHP nepodporuje autoloading funkci. Ale udelej to tak, jak rika @CZechBoY
- nettolog
- Člen | 68
Díky, takže bych měl v config.neon zaregistrovat službu
\Tinify\Tinify
, pochopil jsem tě správně? Ono mi to
totiž píše:
Class \Tinify\Tinify used in service '38_Tinify_Tinify' not found or is not instantiable.
Přitom ta třída je určitě ve složce, kterou robotloader prohledává.
- Šaman
- Člen | 2666
Ne, problém není v injectování. Problém je v tom, že RobotLoader
(nebo Composer, v tomhle to vyjde nastejno) si namapuje jen třídy. Funkce
mimo třídy to ignoruje. (Předpokládá se, že programujeme objektově a
tohle slušné objekty nejsou.) Takže by bylo ideální si tu třidu přepsat
do objektů, resp. aspoň si z ní vytvořit statickou třídu s funkcemi.
Druhá možnost (ale veelmi ošklivá) by byla includovat si ten soubor kam
potřebuješ, klidně i do presenteru, nebo modelové třídy, která by to
obalila. Tzn. použít obyčejné PHP require (nebo include, to je
na tobě).
Mimochodem, asi budeš potřebovat i soubor a třidu
Source
.
Editoval Šaman (31. 7. 2015 20:27)