2024-03-26 20:10:30 +01:00
<!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" >
2024-07-11 13:08:56 +02:00
< h1 > Traits< / h1 >
2024-03-26 20:10:30 +01:00
< div class = "admonition-wrapper" >
< div class = "admonition admonition-sidebar" > < p class = "sidebar-title" > Table of Contents< / p >
2024-07-11 13:08:56 +02:00
< 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 >
2024-03-31 17:41:04 +02:00
< / div >
< / div >
2024-07-11 13:08:56 +02:00
< p > This package provides a number of generic traits like different getter and setter methods, an implementation of the
2024-03-31 17:41:04 +02:00
singleton design pattern and some little helpers. Those traits are too small to justify their own packages and most of them
2024-07-11 13:08:56 +02:00
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 >
2024-03-31 17:41:04 +02:00
< 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 >
2024-03-26 20:10:30 +01:00
< / div >
< / div >
< div class = "section" id = "getter" >
2024-07-11 13:08:56 +02:00
< h2 > Getter< / h2 >
< p > < em > Reads data from inaccessible properties by using magic methods.< / em >
< / p >
2024-03-26 20:10:30 +01:00
2024-07-11 13:08:56 +02:00
< 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
2024-03-31 17:41:04 +02:00
letter).< / p >
2024-07-11 13:08:56 +02:00
< 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 > being thrown.< / 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 >
2024-03-31 17:41:04 +02:00
< 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" >
2024-07-11 13:08:56 +02:00
< h2 > Setter< / h2 >
2024-03-31 17:41:04 +02:00
2024-07-11 13:08:56 +02:00
< 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
2024-03-31 17:41:04 +02:00
letter).< / p >
2024-07-11 13:08:56 +02:00
< 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 > being thrown.< / 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 >
2024-03-31 17:41:04 +02:00
< 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 >
2024-03-26 20:10:30 +01:00
< / div >
< div class = "section" id = "overloadinggetter" >
2024-07-11 13:08:56 +02:00
< h2 > OverloadingGetter< / h2 >
< p > < em > Overloads a class with readable virtual properties.< / em >
< / p >
2024-03-26 20:10:30 +01:00
2024-07-11 13:08:56 +02:00
< 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 >
2024-03-31 17:41:04 +02:00
< 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 >
2024-07-11 13:08:56 +02:00
< 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
2024-03-31 17:41:04 +02:00
package.< / p >
2024-07-11 13:08:56 +02:00
2024-03-31 17:41:04 +02:00
< / 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 >
2024-03-26 20:10:30 +01:00
< / div >
< div class = "section" id = "overloadingsetter" >
2024-07-11 13:08:56 +02:00
< 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 >
2024-03-26 20:10:30 +01:00
2024-07-11 13:08:56 +02:00
< blockquote >
< p > Example: < code > Foo-> bar = 42;< / code >
will set < code > Foo::$_data[' bar' ]< / code >
to < code > 42< / code >
.< / p >
< / blockquote >
2024-03-26 20:10:30 +01:00
2024-03-31 17:41:04 +02:00
< 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 >
2024-07-11 13:08:56 +02:00
< 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
2024-03-31 17:41:04 +02:00
package.< / p >
2024-07-11 13:08:56 +02:00
2024-03-31 17:41:04 +02:00
< / 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 >
2024-03-26 20:10:30 +01:00
< / div >
< div class = "section" id = "singleton" >
2024-07-11 13:08:56 +02:00
< h2 > Singleton< / h2 >
2024-03-26 20:10:30 +01:00
2024-07-11 13:08:56 +02:00
< 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
2024-03-31 17:41:04 +02:00
(irrespective of the given arguments).< / p >
2024-07-11 13:08:56 +02:00
2024-03-31 17:41:04 +02:00
< 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 >
2024-07-11 13:08:56 +02:00
< p > In order for this to work as expected, the constructor has to be implemented as < code > private< / code >
to prevent direct
2024-03-31 17:41:04 +02:00
instantiation of the class.< / p >
2024-07-11 13:08:56 +02:00
2024-03-31 17:41:04 +02:00
< / 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 >
2024-03-26 20:10:30 +01:00
< / div >
< div class = "section" id = "typechecker" >
2024-07-11 13:08:56 +02:00
< h2 > TypeChecker< / h2 >
< p > < em > A generic data type checker.< / em >
< / p >
2024-03-26 20:10:30 +01:00
2024-07-11 13:08:56 +02:00
< p > This allows to set a list of allowed atomic data types and fully qualified class names. It also provides a method to
2024-03-31 17:41:04 +02:00
check if a value' s data type matches at least one of these types.< / p >
2024-07-11 13:08:56 +02:00
< p > 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 >
2024-03-26 20:10:30 +01:00
< / 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 >
2024-07-11 13:08:56 +02:00
< a href = "#top" class = "phpdocumentor-back-to-top" > < i class = "fas fa-chevron-circle-up" > < / i > < / a >
2024-03-26 20:10:30 +01:00
< / 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 >