453 lines
18 KiB
HTML
453 lines
18 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>PHP Basics</title>
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<base href="../../">
|
|
<link rel="icon" href="images/favicon.ico"/>
|
|
<link rel="stylesheet" href="css/normalize.css">
|
|
<link rel="stylesheet" href="css/base.css">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com">
|
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;600;700&display=swap" rel="stylesheet">
|
|
<link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@400;600;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="css/template.css">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0/css/all.min.css" integrity="sha256-ybRkN9dBjhcS2qrW1z+hfCxq+1aBdwyQM5wlQoQVt/0=" crossorigin="anonymous" />
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/themes/prism-okaidia.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/plugins/line-numbers/prism-line-numbers.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/plugins/line-highlight/prism-line-highlight.css">
|
|
<script src="https://cdn.jsdelivr.net/npm/fuse.js@3.4.6"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/css-vars-ponyfill@2"></script>
|
|
<script src="js/template.js"></script>
|
|
<script src="js/search.js"></script>
|
|
<script defer src="js/searchIndex.js"></script>
|
|
</head>
|
|
<body id="top">
|
|
<header class="phpdocumentor-header phpdocumentor-section">
|
|
<h1 class="phpdocumentor-title"><a href="" class="phpdocumentor-title__link">PHP Basics</a></h1>
|
|
<input class="phpdocumentor-header__menu-button" type="checkbox" id="menu-button" name="menu-button" />
|
|
<label class="phpdocumentor-header__menu-icon" for="menu-button">
|
|
<i class="fas fa-bars"></i>
|
|
</label>
|
|
<section data-search-form class="phpdocumentor-search">
|
|
<label>
|
|
<span class="visually-hidden">Search for</span>
|
|
<svg class="phpdocumentor-search__icon" width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<circle cx="7.5" cy="7.5" r="6.5" stroke="currentColor" stroke-width="2"/>
|
|
<line x1="12.4892" y1="12.2727" x2="19.1559" y2="18.9393" stroke="currentColor" stroke-width="3"/>
|
|
</svg>
|
|
<input type="search" class="phpdocumentor-field phpdocumentor-search__field" placeholder="Loading .." disabled />
|
|
</label>
|
|
</section>
|
|
|
|
|
|
<nav class="phpdocumentor-topnav">
|
|
<ul class="phpdocumentor-topnav__menu">
|
|
<li class="phpdocumentor-topnav__menu-item -menu">
|
|
<a href="https://packagist.org/packages/opencultureconsulting/basics">
|
|
<span>
|
|
<i class="fab fa-php"></i>
|
|
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="phpdocumentor-topnav__menu-item -menu">
|
|
<a href="https://github.com/opencultureconsulting/php-basics">
|
|
<span>
|
|
<i class="fab fa-github"></i>
|
|
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="phpdocumentor">
|
|
<div class="phpdocumentor-section">
|
|
<input class="phpdocumentor-sidebar__menu-button" type="checkbox" id="sidebar-button" name="sidebar-button" />
|
|
<label class="phpdocumentor-sidebar__menu-icon" for="sidebar-button">
|
|
Menu
|
|
</label>
|
|
<aside class="phpdocumentor-column -three phpdocumentor-sidebar">
|
|
<section class="phpdocumentor-sidebar__category -documentation">
|
|
<h2 class="phpdocumentor-sidebar__category-header">Documentation</h2>
|
|
<h4 class="phpdocumentor-sidebar__root-namespace">
|
|
<a href="guides/overview/index.html#overview" class="">Overview</a>
|
|
</h4>
|
|
<ul class="phpdocumentor-list">
|
|
<li>
|
|
<a href="guides/overview/datastructures.html#typed-datastructures" class="">Typed Datastructures</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="guides/overview/errorhandlers.html#error-and-exception-handlers" class="">Error and Exception Handlers</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="guides/overview/interfaces.html#interface-traits" class="">Interface Traits</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="guides/overview/traits.html#traits" class="">Traits</a>
|
|
|
|
</li>
|
|
</ul>
|
|
|
|
<h4 class="phpdocumentor-sidebar__root-namespace">
|
|
<a href="guides/usage/index.html#user-guide" class="">User Guide</a>
|
|
</h4>
|
|
<ul class="phpdocumentor-list">
|
|
<li>
|
|
<a href="guides/usage/requirements.html#requirements" class="">Requirements</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="guides/usage/installation.html#installation" class="">Installation</a>
|
|
|
|
</li>
|
|
</ul>
|
|
|
|
<h4 class="phpdocumentor-sidebar__root-namespace">
|
|
<a href="guides/changelog.html#changelog" class="">Changelog</a>
|
|
</h4>
|
|
|
|
</section>
|
|
<section class="phpdocumentor-sidebar__category -namespaces">
|
|
<h2 class="phpdocumentor-sidebar__category-header">Namespaces</h2>
|
|
<h4 class="phpdocumentor-sidebar__root-namespace">
|
|
<a href="namespaces/occ.html" class="">OCC</a>
|
|
</h4>
|
|
<ul class="phpdocumentor-list">
|
|
<li>
|
|
<a href="namespaces/occ-basics.html" class="">Basics</a>
|
|
|
|
</li>
|
|
</ul>
|
|
|
|
</section>
|
|
<section class="phpdocumentor-sidebar__category -packages">
|
|
<h2 class="phpdocumentor-sidebar__category-header">Packages</h2>
|
|
<h4 class="phpdocumentor-sidebar__root-namespace">
|
|
<a href="packages/Basics.html" class="">Basics</a>
|
|
</h4>
|
|
<ul class="phpdocumentor-list">
|
|
<li>
|
|
<a href="packages/Basics-DataStructures.html" class="">DataStructures</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="packages/Basics-ErrorHandlers.html" class="">ErrorHandlers</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="packages/Basics-Interfaces.html" class="">Interfaces</a>
|
|
|
|
</li>
|
|
<li>
|
|
<a href="packages/Basics-Traits.html" class="">Traits</a>
|
|
|
|
</li>
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
<section class="phpdocumentor-sidebar__category -reports">
|
|
<h2 class="phpdocumentor-sidebar__category-header">Reports</h2>
|
|
<h3 class="phpdocumentor-sidebar__root-package"><a href="reports/deprecated.html">Deprecated</a></h3>
|
|
<h3 class="phpdocumentor-sidebar__root-package"><a href="reports/errors.html">Errors</a></h3>
|
|
<h3 class="phpdocumentor-sidebar__root-package"><a href="reports/markers.html">Markers</a></h3>
|
|
</section>
|
|
|
|
<section class="phpdocumentor-sidebar__category -indices">
|
|
<h2 class="phpdocumentor-sidebar__category-header">Indices</h2>
|
|
<h3 class="phpdocumentor-sidebar__root-package"><a href="indices/files.html">Files</a></h3>
|
|
</section>
|
|
</aside>
|
|
|
|
<div class="phpdocumentor-column -nine phpdocumentor-content">
|
|
<section class="section " id="typed-datastructures">
|
|
<h1>Typed Datastructures</h1>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">Table of Contents</p>
|
|
<div class="contents">
|
|
<ul class="phpdocumentor-list">
|
|
<li class="toc-item">
|
|
<a href="guides/overview/datastructures.html#strictcollection">StrictCollection</a>
|
|
|
|
|
|
</li>
|
|
|
|
<li class="toc-item">
|
|
<a href="guides/overview/datastructures.html#strictarray">StrictArray</a>
|
|
|
|
|
|
</li>
|
|
|
|
<li class="toc-item">
|
|
<a href="guides/overview/datastructures.html#strictlist">StrictList</a>
|
|
|
|
|
|
</li>
|
|
|
|
<li class="toc-item">
|
|
<a href="guides/overview/datastructures.html#strictqueue">StrictQueue</a>
|
|
|
|
|
|
</li>
|
|
|
|
<li class="toc-item">
|
|
<a href="guides/overview/datastructures.html#strictstack">StrictStack</a>
|
|
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<p>The datastructures in this package are derived from their respective <a href="https://www.php.net/spl.datastructures">Standard PHP Library (SPL) counterparts</a> which they extend by the option to control the data types of items those
|
|
datastructures can hold.</p>
|
|
|
|
|
|
<p>To restrict allowed data types for items provide the constructor with an array of atomic types or fully qualified class
|
|
names (FQCN) you want to allow as item types. Available atomic types are <code>array</code>
|
|
, <code>bool</code>
|
|
, <code>callable</code>
|
|
, <code>countable</code>
|
|
,
|
|
<code>float</code>
|
|
(or <code>double</code>
|
|
), <code>int</code>
|
|
(or <code>integer</code>
|
|
or <code>long</code>
|
|
), <code>iterable</code>
|
|
, <code>null</code>
|
|
, <code>numeric</code>
|
|
, <code>object</code>
|
|
, <code>resource</code>
|
|
, <code>scalar</code>
|
|
|
|
and <code>string</code>
|
|
.</p>
|
|
|
|
|
|
<p>Trying to add an item with a data type not on the list of allowed types to a strict datastructure will result in an
|
|
<a href="classes/OCC-Basics-DataStructures-Exceptions-InvalidDataTypeException.html"><abbr title="\OCC\Basics\DataStructures\Exceptions\InvalidDataTypeException">InvalidDataTypeException</abbr></a>
|
|
being thrown.</p>
|
|
|
|
|
|
<p>All strict datastructures inherit the implementation of the <a href="https://www.php.net/arrayaccess">\ArrayAccess</a>,
|
|
<a href="https://www.php.net/countable">\Countable</a> and <a href="https://www.php.net/serializable">\Serializable</a> interfaces. All
|
|
but <code>StrictCollection</code>
|
|
also implement a <a href="https://www.php.net/traversable">\Traversable</a> interface.</p>
|
|
|
|
<blockquote>
|
|
<p>Examples:</p>
|
|
<pre><code class="language-php">// create a collection of strings
|
|
$stringCollection = new StrictCollection(['string']);</code></pre>
|
|
<pre><code class="language-php">// create a queue of PSR-15 middlewares
|
|
$middlewareQueue = new StrictQueue(['Psr\Http\Server\MiddlewareInterface']);</code></pre>
|
|
</blockquote>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-DataStructures-StrictCollection.html"><abbr title="\OCC\Basics\DataStructures\StrictCollection">StrictCollection</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<section class="section " id="strictcollection">
|
|
<h2>StrictCollection</h2>
|
|
|
|
|
|
<p><em>A type-sensitive, unsorted collection of items.</em>
|
|
</p>
|
|
|
|
|
|
<p>Holds items as key/value pairs where keys identify the items and have to be valid array keys while values can be of any
|
|
controlled type. The collection can be accessed like an array, but not traversed because it has no particular order.</p>
|
|
|
|
<div class="phpdocumentor-admonition note">
|
|
<svg class="phpdocumentor-admonition__icon" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"></path></svg>
|
|
<article>
|
|
|
|
<p>Internally it holds the items in the <code>$_data</code>
|
|
array, the same as most <a href="guides/overview/interfaces.html">Interface Traits</a> and <a href="guides/overview/traits.html">Traits</a> of this
|
|
package.</p>
|
|
|
|
</article>
|
|
</div>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-DataStructures-StrictArray.html"><abbr title="\OCC\Basics\DataStructures\StrictArray">StrictArray</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<section class="section " id="strictarray">
|
|
<h2>StrictArray</h2>
|
|
|
|
|
|
<p><em>A type-sensitive, traversable array of items.</em>
|
|
</p>
|
|
|
|
|
|
<p>Holds items as key/value pairs where keys identify the items and have to be valid array keys while values can be of any
|
|
controlled type. The array can be accessed and traversed just like any other array.</p>
|
|
|
|
<div class="phpdocumentor-admonition note">
|
|
<svg class="phpdocumentor-admonition__icon" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"></path></svg>
|
|
<article>
|
|
|
|
<p>Internally it holds the items in the <code>$_data</code>
|
|
array, the same as most <a href="guides/overview/interfaces.html">Interface Traits</a> and <a href="guides/overview/traits.html">Traits</a> of this
|
|
package.</p>
|
|
|
|
</article>
|
|
</div>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-DataStructures-StrictList.html"><abbr title="\OCC\Basics\DataStructures\StrictList">StrictList</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<section class="section " id="strictlist">
|
|
<h2>StrictList</h2>
|
|
|
|
|
|
<p><em>A type-sensitive, taversable list of items.</em>
|
|
</p>
|
|
|
|
|
|
<p>Extends <a href="https://www.php.net/spldoublylinkedlist">\SplDoublyLinkedList</a> with an option to restrict the allowed data
|
|
types for list items. The list can be accessed and traversed like an array, but has only consecutive numerical keys.</p>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-DataStructures-StrictQueue.html"><abbr title="\OCC\Basics\DataStructures\StrictQueue">StrictQueue</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<section class="section " id="strictqueue">
|
|
<h2>StrictQueue</h2>
|
|
|
|
|
|
<p><em>A type-sensitive, taversable queue (FIFO) of items.</em>
|
|
</p>
|
|
|
|
|
|
<p>Extends <a href="https://www.php.net/splqueue">\SplQueue</a> with an option to restrict the allowed data types for queue items.
|
|
The queue can be accessed and traversed like an array, but has only consecutive numerical keys. Traversal follows the
|
|
first-in, first-out (FIFO) principle meaning that items are returned in the same order they were added to the queue.</p>
|
|
|
|
|
|
<p>It is recommended to use the <code>StrictQueue::enqueue()</code>
|
|
and <code>StrictQueue::dequeue()</code>
|
|
alias methods when working with a
|
|
queue, because those will ensure proper FIFO behavior and remove items while traversing.</p>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-DataStructures-StrictStack.html"><abbr title="\OCC\Basics\DataStructures\StrictStack">StrictStack</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<section class="section " id="strictstack">
|
|
<h2>StrictStack</h2>
|
|
|
|
|
|
<p><em>A type-sensitive, taversable stack (LIFO) of items.</em>
|
|
</p>
|
|
|
|
|
|
<p>Extends <a href="https://www.php.net/splstack">\SplStack</a> with an option to restrict the allowed data types for stack items.
|
|
The stack can be accessed and traversed like an array, but has only consecutive numerical keys. Traversal follows the
|
|
last-in, first-out (LIFO) principle meaning that items are returned in the reversed order they were added to the stack.</p>
|
|
|
|
|
|
<p>It is recommended to use the <code>StrictStack::stack()</code>
|
|
and <code>StrictStack::unstack()</code>
|
|
alias methods when working with a
|
|
stack, because those will ensure proper LIFO behavior and remove items while traversing.</p>
|
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
<section data-search-results class="phpdocumentor-search-results phpdocumentor-search-results--hidden">
|
|
<section class="phpdocumentor-search-results__dialog">
|
|
<header class="phpdocumentor-search-results__header">
|
|
<h2 class="phpdocumentor-search-results__title">Search results</h2>
|
|
<button class="phpdocumentor-search-results__close"><i class="fas fa-times"></i></button>
|
|
</header>
|
|
<section class="phpdocumentor-search-results__body">
|
|
<ul class="phpdocumentor-search-results__entries"></ul>
|
|
</section>
|
|
</section>
|
|
</section>
|
|
</div>
|
|
<a href="#top" class="phpdocumentor-back-to-top"><i class="fas fa-chevron-circle-up"></i></a>
|
|
|
|
</main>
|
|
|
|
<script>
|
|
cssVars({});
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/prism.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/plugins/autoloader/prism-autoloader.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/plugins/line-highlight/prism-line-highlight.min.js"></script>
|
|
</body>
|
|
</html>
|