Vielzählige "call to undefined method" bei Media Klassen/Objekten
PHPStan meldet an einigen Stellen, an denen Media Klassen verwendet werden, dass undefinierte Methoden aufgerufen werden.
Problematisches Beispiel anzeigen
$ids = $Media->getChildrenIds([
'where' => [
'type' => [
'type' => 'NOT',
'value' => 'folder'
]
]
]);
foreach ($ids as $id) {
try {
$Item = $Media->get($id);
$Item->generateSHA1();
} catch (QUI\Exception $Exception) {
QUI::getMessagesHandler()->addError(
$Exception->getMessage()
);
}
}
In dem Beispiel wird sichergestellt, dass kein Folder
als Media Item geladen wird. Bei Folder
Objekten gibt es die Methode nicht.
Allerdings werden auch Video
Objekte ausgelesen, bei denen die Methode ebenfalls nicht existiert.
Trotz dem try-catch
führt das dann dazu, dass ein Call to undefined method
-Error fliegt.
Um Fehler dieser Art zu verhindern könnte geprüft werden, ob die entsprechende Methode in den Objekte existiert.
Das ist allerdings eine wenig elegante Lösung.
Es wäre schöner, wenn entsprechende Interfaces eingeführt würden, die dann von den Klassen implementiert werden.
An den betroffenen Stellen kann dann geprüft werden, ob das Objekt das entsprechende Interface implementiert.
Für das obige Beispiel wäre das Interface HashableMediaItem
denkbar, dass die Methode generateSHA1
definiert.
Im Code kann dann folgendes gemacht werden:
Lösungsorientiertes Beispiel anzeigen
foreach ($ids as $id) {
try {
$Item = $Media->get($id);
} catch (QUI\Exception $Exception) {
QUI::getMessagesHandler()->addError(
$Exception->getMessage()
);
}
if (!$Item typeof HashableMediaItem) {
continue;
}
$Item->generateSHA1();
}
Fehler anzeigen
------ ----------------------------------------------------------------------
Line admin/ajax/media/create/sha1.php
------ ----------------------------------------------------------------------
27 Call to an undefined method QUI\Projects\Media\Item::generateSHA1().
------ ----------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/deleteCache.php
------ ---------------------------------------------------------------------
14 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ ---------------------------------------------------------------------
------ -------------------------------------------------------------------
Line admin/ajax/media/details.php
------ -------------------------------------------------------------------
47 Call to an undefined method QUI\Projects\Media\Item::getWidth().
51 Call to an undefined method QUI\Projects\Media\Item::getHeight().
75 Call to an undefined method QUI\Projects\Media\Item::getWidth().
79 Call to an undefined method QUI\Projects\Media\Item::getHeight().
------ -------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/file/save.php
------ ---------------------------------------------------------------------
46 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ ---------------------------------------------------------------------
------ ------------------------------------------------------------------------
Line admin/ajax/media/folder/children.php
------ ------------------------------------------------------------------------
35 Call to an undefined method QUI\Projects\Media\Item::getChildrenIds().
76 Call to an undefined method QUI\Projects\Media\Item::getChildrenIds().
------ ------------------------------------------------------------------------
------ ----------------------------------------------------------------------
Line admin/ajax/media/folder/create.php
------ ----------------------------------------------------------------------
28 Call to an undefined method QUI\Projects\Media\Item::createFolder().
------ ----------------------------------------------------------------------
------ -------------------------------------------------------------------
Line admin/ajax/media/folder/download.php
------ -------------------------------------------------------------------
26 Call to an undefined method QUI\Projects\Media\Item::createZIP().
------ -------------------------------------------------------------------
------ --------------------------------------------------------------------
Line admin/ajax/media/folder/firstImage.php
------ --------------------------------------------------------------------
31 Call to an undefined method QUI\Projects\Media\Item::firstImage().
------ --------------------------------------------------------------------
------ -----------------------------------------------------------------
Line admin/ajax/media/folder/getSize.php
------ -----------------------------------------------------------------
26 Call to an undefined method QUI\Projects\Media\Item::getSize().
------ -----------------------------------------------------------------
------ -----------------------------------------------------------------------------
Line admin/ajax/media/folder/recursiveEffects.php
------ -----------------------------------------------------------------------------
27 Call to an undefined method QUI\Projects\Media\Item::setEffectsRecursive().
------ -----------------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/get.php
------ ---------------------------------------------------------------------
25 Call to an undefined method QUI\Projects\Media\Item::getChildren().
------ ---------------------------------------------------------------------
------ --------------------------------------------------------------------
Line admin/ajax/media/getsubfolders.php
------ --------------------------------------------------------------------
30 Call to an undefined method QUI\Projects\Media\Item::getFolders().
36 Call to an undefined method QUI\Projects\Media\Item::getFolders().
------ --------------------------------------------------------------------
------ -------------------------------------------------------------------------
Line admin/ajax/media/url/resized.php
------ -------------------------------------------------------------------------
36 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
------ -------------------------------------------------------------------------
------ -----------------------------------------------------------------------------
Line lib/QUI/Projects/Media.php
------ -----------------------------------------------------------------------------
616 Call to an undefined method QUI\Projects\Media\Item::childWithNameExists().
694 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ -----------------------------------------------------------------------------
------ -----------------------------------------------------------------------
Line lib/QUI/Projects/Media/Folder.php
------ -----------------------------------------------------------------------
1379 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
1456 Call to an undefined method QUI\Projects\Media\Item::generateMD5().
1457 Call to an undefined method QUI\Projects\Media\Item::generateSHA1().
1471 Call to an undefined method QUI\Projects\Media\Item::getResizeSize().
1474 Call to an undefined method QUI\Projects\Media\Item::resize().
1522 Call to an undefined method QUI\Projects\Media\Item::uploadFolder().
------ -----------------------------------------------------------------------
------ -------------------------------------------------------------------------
Line lib/QUI/Projects/Media/Utils.php
------ -------------------------------------------------------------------------
105 Call to an undefined method QUI\Projects\Media\Item::hasChildren().
106 Call to an undefined method QUI\Projects\Media\Item::hasSubFolders().
128 Call to an undefined method QUI\Projects\Media\Item::hasChildren().
129 Call to an undefined method QUI\Projects\Media\Item::hasSubFolders().
391 Call to an undefined method QUI\Projects\Media\Item::getWidth().
443 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
463 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
480 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
491 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
925 Call to an undefined method QUI\Projects\Media\Item::createSizeCache().
931 Call to an undefined method QUI\Projects\Media\Item::createCache().
1405 Call to an undefined method DOMNode::getAttribute().
------ -------------------------------------------------------------------------