File manager - Edit - /home/c14075/dragmet-ural.ru/www/bitrix/modules/ipol.sdek/classes/lib/Core/IndexCollection.php
Back
<?php namespace Ipolh\SDEK\Core; use Exception; use Ipolh\SDEK\Core\Entity\Collection; /** * Class IndexCollection * @package Ipolh\SDEK\Core * Collection, modified for indexed object search, here index is some field, stored in element, * which can be accessed through method passed in constructor */ class IndexCollection extends Collection { /** * @var string - field in collected elements corresponds to array 4 quick select */ protected $linkMethod; /** * Keeps links index => elementLink * @var array */ protected $links; /** * @throws Exception */ public function __construct($field, $linkMethod) { if(!$linkMethod){ throw new Exception('No link for indexing'); } $this->linkMethod = $linkMethod; $this->fleeLinks(); parent::__construct($field); } /** * totally clears links */ protected function fleeLinks() { $this->links = array(); } public function clear() { $this->fleeLinks(); return parent::clear(); } public function delete($index) { if(parent::delete($index)){ $this->fleeLinks(); $link = $this->field; foreach ($this->$link as $key => $element){ if(method_exists($element, $this->linkMethod)){ $method = $this->linkMethod; $this->addLink($key, $element->$method()); return true; } else { $this->setError('Unable to call method '.($this->linkMethod).' in given object'); return false; } } } return false; } public function deleteByLink($link){ $index = $this->getIndexByLink($link); if($index !== false){ return $this->delete($index); } return false; } public function add($something) { if(method_exists($something, $this->linkMethod)){ parent::add($something); $link = $this->field; $index = count($this->$link); $method = $this->linkMethod; $this->addLink($index-1, $something->$method()); } else { $this->setError('Unable to call method '.($this->linkMethod).' in given object'); } return $this; } /** * Returns element by link * @param $link * @return mixed */ public function getByLink($link) { $index = $this->getIndexByLink($link); if($index !== false){ $container = $this->field; $container = $this->$container; return $container[$index]; } return false; } protected function getIndexByLink($link) { if(array_key_exists($link, $this->links)){ $index = $this->links[$link]; $container = $this->field; if(array_key_exists($index, $this->$container)){ return $index; } } return false; } /** * Adds link => index * @param $index * @param $link */ protected function addLink($index, $link) { $this->links[$link] = $index; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.27 |
proxy
|
phpinfo
|
Settings