PHP Classes

File: vendor/gabordemooij/redbean/RedBeanPHP/Util/Either.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/RedBeanPHP/Util/Either.php   Download  
File: vendor/gabordemooij/redbean/RedBeanPHP/Util/Either.php
Role: Class source
Content type: text/plain
Description: Class source
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 1 month ago
Size: 3,566 bytes
 

Contents

Class file image Download
<?php

namespace RedBeanPHP\Util;

/**
 * Either Utility
 *
 * The Either Utility class provides an easy way to
 * substitute the NULL coalesce operator in RedBeanPHP
 * (since the lazy loading interface interferes with the ??
 * operator) in a way that can also be used in older PHP-versions.
 *
 * @file RedBeanPHP/Util/Either.php
 * @author Gabor de Mooij and the RedBeanPHP Community
 * @license BSD/GPLv2
 *
 * @copyright
 * copyright (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community
 * This source file is subject to the BSD/GPLv2 License that is bundled
 * with this source code in the file license.txt.
 */
class Either {

   
/**
     * @var mixed
     */
   
private $result;

   
/**
     * Constructs a new Either-instance.
     *
     * Example usage:
     *
     * <code>
     * $author = $text
     * ->either()
     * ->page
     * ->book
     * ->autor
     * ->name
     * ->or('unknown');
     * </code>
     *
     * The Either-class lets you access bean properties without having to do
     * NULL-checks. The mechanism resembles the use of the ?? somewhat but
     * offers backward compatibility with older PHP versions. The mechanism also works
     * on arrays.
     *
     * <code>
     * $budget = $company
     * ->either()
     * ->sharedProject
     * ->first()
     * ->budget
     * ->or(0);
     * </code>
     */
   
public function __construct($result) {
       
$this->result = $result;
    }

   
/**
     * Extracts a value from the wrapped object and stores
     * it in the internal result object. If the desired
     * value cannot be found, the internal result object will be set
     * to NULL. Chainable.
     *
     * @param string $something name of the property you wish to extract the value of
     *
     * @return self
     */
   
public function __get($something) {
        if (
is_object($this->result)) {
           
$this->result = $this->result->{$something};
        } else {
           
$this->result = NULL;
        }
        return
$this;
    }

   
/**
     * Extracts the first element of the array in the internal result
     * object and stores it as the new value of the internal result object.
     * Chainable.
     *
     * @return self
     */
   
public function first() {
        if (
is_array($this->result)) {
           
reset($this->result);
           
$key = key($this->result);
            if (isset(
$this->result[$key])) {
               
$this->result = $this->result[$key];
            } else {
               
$this->result = NULL;
            }
        }
        return
$this;
    }

   
/**
     * Extracts the last element of the array in the internal result
     * object and stores it as the new value of the internal result object.
     * Chainable.
     *
     * @return self
     */
   
public function last() {
        if (
is_array($this->result)) {
           
end($this->result);
           
$key = key($this->result);
            if (isset(
$this->result[$key])) {
               
$this->result = $this->result[$key];
            } else {
               
$this->result = NULL;
            }
        }
        return
$this;
    }

   
/**
     * Extracts the specified element of the array in the internal result
     * object and stores it as the new value of the internal result object.
     * Chainable.
     *
     * @return self
     */
   
public function index( $key = 0 ) {
        if (
is_array($this->result)) {
            if (isset(
$this->result[$key])) {
               
$this->result = $this->result[$key];
            } else {
               
$this->result = NULL;
            }
        }
        return
$this;
    }

   
/**
     * Resolves the Either-instance to a final value, either the value
     * contained in the internal result object or the value specified
     * in the or() function.
     *
     * @param mixed $value value to resolve to if internal result equals NULL
     *
     * @return mixed
     */
   
public function _or( $value ) {
       
$reference = (is_null($this->result)) ? $value : $this->result;
        return
$reference;
    }
}