Разбор ООП с Delphinum

29.42K
.

Всё чушь и бред. Достаточно заглянуть в документацию и увидеть комментарий, где говорится, что из-за особенностей реализации необходимо вызывать метод current(), чтобы предотвратить бесконечный цикл.

.

reaper, хорошо, спс, буду знать.

.

По поводу зендовского локатора служб накидал статью. Возможно это решит некоторые вопросы, связанные с этим паттерном.

.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
# Delphinum (16.12.2016 / 14:02)
По поводу зендовского локатора служб накидал статью. Возможно это решит некоторые вопросы, связанные с этим паттерном.
Вот это уже полезно, в свете наших новых локальных разработок (JohnCMS 7, mobiCMS) - это основное связующее звено движка (читай центр ядра).

Но в контексте именно zend-servicemanager статья неполная.
Практически мало рассмотрена programmatic / config-driven инициализация сервиса.

1) программное, пихаем все сервисы построчно, как описано в статье.

2) на конфигах (что рекомендуется разработчиками Zend), в этом случае вся конфигурация контейнера и подключаемые сервисы описаны в конфиг файлах и загружаются в контейнер при его инициализации.
Пример: реализация подобного метода в JohnCMS 7
Считываем конфигурацию из файлов
Инициализируем сам контейнер и загружаем в него конфигурацию
Ну и конкретный пример конфига

Что интересно, большинство пакетов Zend Framework уже из коробки рассчитаны на работу с конфигами и имеют на борту фабрики для сервисменеджера+конфиги, что видно на примере примененного у нас zend-i18n
.

AlkatraZ, в самом конце в двух словах обмолвился о конфигурировании контейнера.

.
ДоХтор

Сегодня с помощью get_declared_classes() обнаружил доступность 186-и классов "по умолчанию"... Это нормально, если я ними не пользуюсь?

* (+/-)
/*
array(186) {
  [0]=>
  string(8) "stdClass"
  [1]=>
  string(9) "Exception"
  [2]=>
  string(14) "ErrorException"
  [3]=>
  string(7) "Closure"
  [4]=>
  string(8) "DateTime"
  [5]=>
  string(12) "DateTimeZone"
  [6]=>
  string(12) "DateInterval"
  [7]=>
  string(10) "DatePeriod"
  [8]=>
  string(14) "LogicException"
  [9]=>
  string(24) "BadFunctionCallException"
  [10]=>
  string(22) "BadMethodCallException"
  [11]=>
  string(15) "DomainException"
  [12]=>
  string(24) "InvalidArgumentException"
  [13]=>
  string(15) "LengthException"
  [14]=>
  string(19) "OutOfRangeException"
  [15]=>
  string(16) "RuntimeException"
  [16]=>
  string(20) "OutOfBoundsException"
  [17]=>
  string(17) "OverflowException"
  [18]=>
  string(14) "RangeException"
  [19]=>
  string(18) "UnderflowException"
  [20]=>
  string(24) "UnexpectedValueException"
  [21]=>
  string(25) "RecursiveIteratorIterator"
  [22]=>
  string(16) "IteratorIterator"
  [23]=>
  string(14) "FilterIterator"
  [24]=>
  string(23) "RecursiveFilterIterator"
  [25]=>
  string(22) "CallbackFilterIterator"
  [26]=>
  string(31) "RecursiveCallbackFilterIterator"
  [27]=>
  string(14) "ParentIterator"
  [28]=>
  string(13) "LimitIterator"
  [29]=>
  string(15) "CachingIterator"
  [30]=>
  string(24) "RecursiveCachingIterator"
  [31]=>
  string(16) "NoRewindIterator"
  [32]=>
  string(14) "AppendIterator"
  [33]=>
  string(16) "InfiniteIterator"
  [34]=>
  string(13) "RegexIterator"
  [35]=>
  string(22) "RecursiveRegexIterator"
  [36]=>
  string(13) "EmptyIterator"
  [37]=>
  string(21) "RecursiveTreeIterator"
  [38]=>
  string(11) "ArrayObject"
  [39]=>
  string(13) "ArrayIterator"
  [40]=>
  string(22) "RecursiveArrayIterator"
  [41]=>
  string(11) "SplFileInfo"
  [42]=>
  string(17) "DirectoryIterator"
  [43]=>
  string(18) "FilesystemIterator"
  [44]=>
  string(26) "RecursiveDirectoryIterator"
  [45]=>
  string(12) "GlobIterator"
  [46]=>
  string(13) "SplFileObject"
  [47]=>
  string(17) "SplTempFileObject"
  [48]=>
  string(19) "SplDoublyLinkedList"
  [49]=>
  string(8) "SplQueue"
  [50]=>
  string(8) "SplStack"
  [51]=>
  string(7) "SplHeap"
  [52]=>
  string(10) "SplMinHeap"
  [53]=>
  string(10) "SplMaxHeap"
  [54]=>
  string(16) "SplPriorityQueue"
  [55]=>
  string(13) "SplFixedArray"
  [56]=>
  string(16) "SplObjectStorage"
  [57]=>
  string(16) "MultipleIterator"
  [58]=>
  string(19) "ReflectionException"
  [59]=>
  string(10) "Reflection"
  [60]=>
  string(26) "ReflectionFunctionAbstract"
  [61]=>
  string(18) "ReflectionFunction"
  [62]=>
  string(19) "ReflectionParameter"
  [63]=>
  string(16) "ReflectionMethod"
  [64]=>
  string(15) "ReflectionClass"
  [65]=>
  string(16) "ReflectionObject"
  [66]=>
  string(18) "ReflectionProperty"
  [67]=>
  string(19) "ReflectionExtension"
  [68]=>
  string(23) "ReflectionZendExtension"
  [69]=>
  string(14) "SessionHandler"
  [70]=>
  string(22) "__PHP_Incomplete_Class"
  [71]=>
  string(15) "php_user_filter"
  [72]=>
  string(9) "Directory"
  [73]=>
  string(10) "ZipArchive"
  [74]=>
  string(11) "LibXMLError"
  [75]=>
  string(12) "DOMException"
  [76]=>
  string(13) "DOMStringList"
  [77]=>
  string(11) "DOMNameList"
  [78]=>
  string(21) "DOMImplementationList"
  [79]=>
  string(23) "DOMImplementationSource"
  [80]=>
  string(17) "DOMImplementation"
  [81]=>
  string(7) "DOMNode"
  [82]=>
  string(16) "DOMNameSpaceNode"
  [83]=>
  string(19) "DOMDocumentFragment"
  [84]=>
  string(11) "DOMDocument"
  [85]=>
  string(11) "DOMNodeList"
  [86]=>
  string(15) "DOMNamedNodeMap"
  [87]=>
  string(16) "DOMCharacterData"
  [88]=>
  string(7) "DOMAttr"
  [89]=>
  string(10) "DOMElement"
  [90]=>
  string(7) "DOMText"
  [91]=>
  string(10) "DOMComment"
  [92]=>
  string(11) "DOMTypeinfo"
  [93]=>
  string(18) "DOMUserDataHandler"
  [94]=>
  string(11) "DOMDomError"
  [95]=>
  string(15) "DOMErrorHandler"
  [96]=>
  string(10) "DOMLocator"
  [97]=>
  string(16) "DOMConfiguration"
  [98]=>
  string(15) "DOMCdataSection"
  [99]=>
  string(15) "DOMDocumentType"
  [100]=>
  string(11) "DOMNotation"
  [101]=>
  string(9) "DOMEntity"
  [102]=>
  string(18) "DOMEntityReference"
  [103]=>
  string(24) "DOMProcessingInstruction"
  [104]=>
  string(15) "DOMStringExtend"
  [105]=>
  string(8) "DOMXPath"
  [106]=>
  string(12) "PDOException"
  [107]=>
  string(3) "PDO"
  [108]=>
  string(12) "PDOStatement"
  [109]=>
  string(6) "PDORow"
  [110]=>
  string(16) "SimpleXMLElement"
  [111]=>
  string(17) "SimpleXMLIterator"
  [112]=>
  string(9) "XMLReader"
  [113]=>
  string(9) "XMLWriter"
  [114]=>
  string(5) "finfo"
  [115]=>
  string(16) "ImagickException"
  [116]=>
  string(20) "ImagickDrawException"
  [117]=>
  string(29) "ImagickPixelIteratorException"
  [118]=>
  string(21) "ImagickPixelException"
  [119]=>
  string(7) "Imagick"
  [120]=>
  string(11) "ImagickDraw"
  [121]=>
  string(20) "ImagickPixelIterator"
  [122]=>
  string(12) "ImagickPixel"
  [123]=>
  string(12) "MemcachePool"
  [124]=>
  string(8) "Memcache"
  [125]=>
  string(11) "MongoClient"
  [126]=>
  string(5) "Mongo"
  [127]=>
  string(7) "MongoDB"
  [128]=>
  string(15) "MongoCollection"
  [129]=>
  string(11) "MongoCursor"
  [130]=>
  string(18) "MongoCommandCursor"
  [131]=>
  string(11) "MongoGridFS"
  [132]=>
  string(15) "MongoGridFSFile"
  [133]=>
  string(17) "MongoGridFSCursor"
  [134]=>
  string(15) "MongoWriteBatch"
  [135]=>
  string(16) "MongoInsertBatch"
  [136]=>
  string(16) "MongoUpdateBatch"
  [137]=>
  string(16) "MongoDeleteBatch"
  [138]=>
  string(7) "MongoId"
  [139]=>
  string(9) "MongoCode"
  [140]=>
  string(10) "MongoRegex"
  [141]=>
  string(9) "MongoDate"
  [142]=>
  string(12) "MongoBinData"
  [143]=>
  string(10) "MongoDBRef"
  [144]=>
  string(14) "MongoException"
  [145]=>
  string(24) "MongoConnectionException"
  [146]=>
  string(20) "MongoCursorException"
  [147]=>
  string(27) "MongoCursorTimeoutException"
  [148]=>
  string(20) "MongoGridFSException"
  [149]=>
  string(20) "MongoResultException"
  [150]=>
  string(26) "MongoWriteConcernException"
  [151]=>
  string(26) "MongoDuplicateKeyException"
  [152]=>
  string(30) "MongoExecutionTimeoutException"
  [153]=>
  string(22) "MongoProtocolException"
  [154]=>
  string(14) "MongoTimestamp"
  [155]=>
  string(10) "MongoInt32"
  [156]=>
  string(10) "MongoInt64"
  [157]=>
  string(8) "MongoLog"
  [158]=>
  string(9) "MongoPool"
  [159]=>
  string(11) "MongoMaxKey"
  [160]=>
  string(11) "MongoMinKey"
  [161]=>
  string(20) "mysqli_sql_exception"
  [162]=>
  string(13) "mysqli_driver"
  [163]=>
  string(6) "mysqli"
  [164]=>
  string(14) "mysqli_warning"
  [165]=>
  string(13) "mysqli_result"
  [166]=>
  string(11) "mysqli_stmt"
  [167]=>
  string(13) "PharException"
  [168]=>
  string(4) "Phar"
  [169]=>
  string(8) "PharData"
  [170]=>
  string(12) "PharFileInfo"
  [171]=>
  string(15) "PDFlibException"
  [172]=>
  string(6) "PDFlib"
  [173]=>
  string(5) "Redis"
  [174]=>
  string(10) "RedisArray"
  [175]=>
  string(14) "RedisException"
  [176]=>
  string(10) "SoapClient"
  [177]=>
  string(7) "SoapVar"
  [178]=>
  string(10) "SoapServer"
  [179]=>
  string(9) "SoapFault"
  [180]=>
  string(9) "SoapParam"
  [181]=>
  string(10) "SoapHeader"
  [182]=>
  string(7) "SQLite3"
  [183]=>
  string(11) "SQLite3Stmt"
  [184]=>
  string(13) "SQLite3Result"
  [185]=>
  string(13) "XSLTProcessor"
}*/
.

нормально

.
(\/)____o_O____(\/)

ДоХтор, половина стандартной библиотеки, а может и быльше

.
# Koenig (09.01.2017 / 19:09)
ДоХтор, половина стандартной библиотеки, а может и быльше
Ну у меня потому и возник вопрос, нужны ли эти библиотеки в области видимости (или как правильно это назвать?) скриптов, которые их не используют? Не тормозит ли всё это "барахло" работу скриптов...
.

ДоХтор, нет, количество задекларированных классов не влияет на производительность

Всего: 713