386 lines
18 KiB
HTML
386 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">
|
|
<div class="section" id="traits">
|
|
<h1>Traits</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/traits.html#getter">Getter</a></li><li class="toc-item"><a href="guides/overview/traits.html#setter">Setter</a></li><li class="toc-item"><a href="guides/overview/traits.html#overloadinggetter">OverloadingGetter</a></li><li class="toc-item"><a href="guides/overview/traits.html#overloadingsetter">OverloadingSetter</a></li><li class="toc-item"><a href="guides/overview/traits.html#singleton">Singleton</a></li><li class="toc-item"><a href="guides/overview/traits.html#typechecker">TypeChecker</a></li></ul></div>
|
|
</div>
|
|
</div>
|
|
|
|
<p>This package provides a number of generic traits like different getter and setter methods, an implementation of the
|
|
singleton design pattern and some little helpers. Those traits are too small to justify their own packages and most of them
|
|
are dependencies of the <a href="guides/overview/datastructures.html">Typed Datastructures</a>
|
|
and <a href="guides/overview/interfaces.html">Interface Traits</a>
|
|
anyway.</p>
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-Traits-Getter.html"><abbr title="\OCC\Basics\Traits\Getter">Getter</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section" id="getter">
|
|
<h2>Getter</h2>
|
|
|
|
<p><em>Reads data from inaccessible properties by using magic methods.</em></p>
|
|
<p>To make a <code>protected</code> or <code>private</code> property readable, provide a method named <code>_magicGet{Property}()</code> which handles the
|
|
reading. Replace <code>{Property}</code> in the method's name with the name of the actual property (with an uppercase first
|
|
letter).</p>
|
|
<p>Trying to access an undefined property or a property without corresponding "magic" getter method will result in an
|
|
<a href="https://www.php.net/invalidargumentexception">\InvalidArgumentException</a>.</p>
|
|
<blockquote><p>Example: If the property is named <code>$fooBar</code>, the "magic" method has to be <code>_magicGetFooBar()</code>. This method is then
|
|
called when <code>$fooBar</code> is read in a context where it normally would not be accessible.</p></blockquote>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-Traits-Setter.html"><abbr title="\OCC\Basics\Traits\Setter">Setter</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="section" id="setter">
|
|
<h2>Setter</h2>
|
|
|
|
<p><em>Writes data to inaccessible properties by using magic methods.</em></p>
|
|
<p>To make a <code>protected</code> or <code>private</code> property writable, provide a method named <code>_magicSet{Property}()</code> which handles the
|
|
writing. Replace <code>{Property}</code> in the method's name with the name of the actual property (with an uppercase first
|
|
letter).</p>
|
|
<p>Trying to access an undefined property or a property without corresponding "magic" setter method will result in an
|
|
<a href="https://www.php.net/invalidargumentexception">\InvalidArgumentException</a>.</p>
|
|
<blockquote><p>Example: If the property is named <code>$fooBar</code>, the "magic" method has to be <code>_magicSetFooBar()</code>. This method is then
|
|
called when <code>$fooBar</code> is written to in a context where it normally would not be accessible.</p></blockquote>
|
|
|
|
<div class="admonition-wrapper">
|
|
<div class="admonition admonition-sidebar"><p class="sidebar-title">API Documentation</p>
|
|
|
|
|
|
<ul>
|
|
<li><a href="classes/OCC-Basics-Traits-OverloadingGetter.html"><abbr title="\OCC\Basics\Traits\OverloadingGetter">OverloadingGetter</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="section" id="overloadinggetter">
|
|
<h2>OverloadingGetter</h2>
|
|
|
|
<p><em>Overloads a class with readable virtual properties.</em></p>
|
|
<p>It reads a protected internal array whose keys are interpreted as property names.</p>
|
|
<p>Trying to access an undefined virtual property will not issue any warning or error, but return <code>NULL</code> instead.</p>
|
|
<blockquote><p>Example: Reading <code>Foo->bar</code> will return the value of <code>Foo::$_data['bar']</code>.</p></blockquote>
|
|
|
|
<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 uses the <code>$_data</code> array, the same as some <a href="guides/overview/datastructures.html">Typed Datastructures</a>
|
|
and all <a href="guides/overview/interfaces.html">Interface 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-Traits-OverloadingSetter.html"><abbr title="\OCC\Basics\Traits\OverloadingSetter">OverloadingSetter</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="section" id="overloadingsetter">
|
|
<h2>OverloadingSetter</h2>
|
|
|
|
<p><em>Overloads a class with writable virtual properties.</em></p>
|
|
<p>It writes a protected internal array whose keys are interpreted as property names.</p>
|
|
<p>Trying to access a previously undefined virtual property will create a new one with the given name.</p>
|
|
<blockquote><p>Example: <code>Foo->bar = 42;</code> will set <code>Foo::$_data['bar']</code> to <code>42</code>.</p></blockquote>
|
|
|
|
<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 uses the <code>$_data</code> array, the same as some <a href="guides/overview/datastructures.html">Typed Datastructures</a>
|
|
and all <a href="guides/overview/interfaces.html">Interface 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-Traits-Singleton.html"><abbr title="\OCC\Basics\Traits\Singleton">Singleton</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="section" id="singleton">
|
|
<h2>Singleton</h2>
|
|
|
|
<p><em>Allows just a single instance of the class using this trait.</em></p>
|
|
<p>Get the singleton by calling the static method <code>getInstance()</code>. If there is no object yet, the constructor is called
|
|
with the same arguments as <code>getInstance()</code>. Any later call will just return the already instantiated object
|
|
(irrespective of the given arguments).</p>
|
|
<div class="phpdocumentor-admonition caution">
|
|
<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="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg>
|
|
<article>
|
|
<p>In order for this to work as expected, the constructor has to be implemented as <code>private</code> to prevent direct
|
|
instantiation of the class.</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-Traits-TypeChecker.html"><abbr title="\OCC\Basics\Traits\TypeChecker">TypeChecker</abbr></a>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="section" id="typechecker">
|
|
<h2>TypeChecker</h2>
|
|
|
|
<p><em>A generic data type checker.</em></p>
|
|
<p>This allows to set a list of allowed atomic data types and fully qualified class names. It also provides a method to
|
|
check if a value's data type matches at least one of these types.</p>
|
|
<p>Available atomic types are <code>array</code>, <code>bool</code>, <code>callable</code>, <code>countable</code>, <code>float</code> / <code>double</code>, <code>int</code> / <code>integer</code> / <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>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</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="guides/overview/traits.html#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>
|