Overview

Namespaces

  • Baguette
    • Mastodon
      • Config
      • Entity
      • Grant
      • Service
  • GuzzleHttp
    • Cookie
    • Exception
    • Handler
    • Promise
  • Psr
    • Http
      • Message
  • Teto
    • Object

Classes

  • Baguette\Mastodon\Client
  • Baguette\Mastodon\Config\DotEnvStorage
  • Baguette\Mastodon\Entity\Account
  • Baguette\Mastodon\Entity\Application
  • Baguette\Mastodon\Entity\Attachment
  • Baguette\Mastodon\Entity\Card
  • Baguette\Mastodon\Entity\Context
  • Baguette\Mastodon\Entity\Entity
  • Baguette\Mastodon\Entity\Error_
  • Baguette\Mastodon\Entity\Instance
  • Baguette\Mastodon\Entity\Mention
  • Baguette\Mastodon\Entity\Notification
  • Baguette\Mastodon\Entity\Status
  • Baguette\Mastodon\Entity\Tag
  • Baguette\Mastodon\EntityCaster
  • Baguette\Mastodon\Grant\CodeGrant
  • Baguette\Mastodon\Grant\Grant
  • Baguette\Mastodon\Grant\NoopGrant
  • Baguette\Mastodon\Grant\PasswordCredential
  • Baguette\Mastodon\Mastodon
  • Baguette\Mastodon\Requester
  • Baguette\Mastodon\Service\AuthFactory
  • Baguette\Mastodon\Service\Authorization
  • Baguette\Mastodon\Service\Scope
  • Baguette\Mastodon\Service\SessionStorage
  • Baguette\Mastodon\Service\Toot

Interfaces

  • Baguette\Mastodon\Config\Storage

Exceptions

  • Baguette\Mastodon\Service\AuthorizationException

Constants

  • Baguette\Mastodon\Entity\DATETIME_FORMAT

Functions

  • Baguette\Mastodon\authorization
  • Baguette\Mastodon\credential
  • Baguette\Mastodon\Entity\map
  • Baguette\Mastodon\Entity\mapValues
  • Baguette\Mastodon\Entity\toArrayValue
  • Baguette\Mastodon\grant
  • Baguette\Mastodon\http
  • Baguette\Mastodon\request
  • Baguette\Mastodon\scope
  • Baguette\Mastodon\session
  • Baguette\Mastodon\toot
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 
<?php

namespace Teto\Object;

/**
 * Typed property function for class
 *
 * @author    USAMI Kenta <tadsan@zonu.me>
 * @copyright 2016 Baguette HQ
 * @license   http://www.apache.org/licenses/LICENSE-2.0
 */
trait TypedProperty
{
    use TypeAssert;

    /** @var array */
    private $properties = [];

    /**
     * Set property (magic method)
     *
     * @param  string $name
     * @param  mixed  $value
     * @throws \OutOfRangeException      If you set to undefined property
     * @throws \InvalidArgumentException If differed from the defined type
     * @throws \RangeException           If differed from the defined length
     * @see    http://php.net/manual/language.oop5.magic.php
     */
    public function __set($name, $value)
    {
        if (!isset(self::$property_types[$name])) {
            throw new \OutOfRangeException("Unexpected key:'$name'");
        }

        $type = TypeDefinition::parse(self::$property_types[$name]);

        if ($type->is_array) {
            self::assertArrayOrObject($value);
            $values = $value;
        } else {
            $values = [$value];
        }

        foreach ($values as $v) {
            self::assertValue($type->expected, $name, $v, $type->is_nullable);
        }
        if ($type->len !== null && count($value) !== $type->len) {
            throw new \RangeException("Unexpected length:{$name} (expects {$type->len})");
        }

        $this->properties[$name] = $value;
    }

    /**
     * Get property (magic method)
     *
     * @param  string $name
     * @return mixed
     * @see    http://php.net/manual/language.oop5.magic.php
     */
    public function __get($name)
    {
        if (!isset(self::$property_types[$name])) {
            throw new \OutOfRangeException("Unexpected key:'$name'");
        }

        return isset($this->properties[$name]) ? $this->properties[$name] : null;
    }

    /**
     * @param  string $name
     * @return bool
     * @see    http://php.net/manual/language.oop5.magic.php
     */
    public function __isset($name)
    {
        return isset($this->properties[$name]);
    }

    /**
     * @param string $name
     * @see   http://php.net/manual/language.oop5.magic.php
     */
    public function __unset($name)
    {
        if (isset(self::$property_types[$name])) {
            $this->properties[$name] = null;
        }
    }

    /**
     * @param array
     */
    private function setProperties(array $properties)
    {
        foreach (self::$property_types as $name => $_) {
            if (isset($properties[$name])) {
                $this->$name = $properties[$name];
            }
        }
    }
}
ξ ^ω^)ξ Baguette PHP Mastodon API Client / SDK API documentation generated by ApiGen