1. Go to this page and download the library: Download spindle/types library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spindle / types example snippets
final class Suit extends Spindle\Types\Enum
{
const SPADE = 'spade'
, CLUB = 'club'
, HEART = 'heart'
, DIAMOND = 'diamond'
}
$spade = new Suit(Suit::SPADE);
$spade = Suit::SPADE(); //syntax sugar
echo $spade, PHP_EOL;
echo $spade->valueOf(), PHP_EOL;
function doSomething(Suit $suit)
{
//$suitは必ず4種類のうちのどれかである
}
class User extends Spindle\Types\TypedObject
{
static function schema()
{
return array(
'firstName' => self::STR,
'lastName' => self::STR,
'age' => self::INT,
'birthday' => 'DateTime', new DateTime('1990-01-01'),
);
}
function checkErrors()
{
$errors = array();
if ($this->age < 0) {
$errors['age'] = 'ageは0以上である必要があります';
}
return $errors;
}
}
$taro = new User;
$taro->firstName = 'Taro';
$taro->lastName = 'Tanaka';
$taro->age = 20;
//$taro->age = '20'; とすると、InvalidArgumentExceptionが発生して停止する
use Spindle\Types;
class MyObj extends Types\TypedObject
{
static function schema()
{
return array(
'a' => self::INT,
'b' => self::BOOL,
);
}
}
$obj = new MyObj;
Types\TypedObject::$preventExtensions = false;
$obj->c = 'str'; //エラーは起きない
Types\TypedObject::$preventExtensions = true;
$obj->c = 'str'; //例外発生
use Spindle\Types;
class User extends Types\TypedObject
{
static $casting = true;
static function schema()
{
return array(
'userId' => self::INT,
'name' => self::STR,
'age' => self::INT
);
}
}
$pdo = new PDO('sqlite::memory:', null, null, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
));
$pdo->exec('CREATE TABLE User(userId INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)');
$pdo->exec('INSERT INTO User(name, age) VALUES("taro", 20)');
$pdo->exec('INSERT INTO User(name, age) VALUES("hanako", 21)');
$stmt = $pdo->prepare('SELECT * FROM User');
$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, __NAMESPACE__ . '\\RowModel');
$stmt->execute();
foreach ($stmt as $row) {
self::assertInternalType('integer', $row->userId);
self::assertInternalType('string', $row->name);
self::assertInternalType('integer', $row->age);
}
class Employee extends Spindle\Types\TypedObject
{
static function schema()
{
return array(
'id' => self::INT, 0,
'name' => self::STR,
);
}
}
class Boss extends Employee
{
static function schema()
{
return self::extend(parent::schema(), array(
'room' => self::INT,
));
}
}