/PersistentObject/src/object/persistent_object_id_property.php
https://github.com/F5/zetacomponents · PHP · 253 lines · 127 code · 6 blank · 120 comment · 17 complexity · b50e302b3c18a12ca88ffe8d33effb9c MD5 · raw file
- <?php
- /**
- * File containing the ezcPersistentObjectIdProperty class.
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- * @version //autogen//
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- * @package PersistentObject
- */
- /**
- * Defines a persistent object id field.
- *
- * The column should be of type int both in PHP and in the database, usually.
- * If you want to use a string ID, you need to use the {@link
- * ezcPersistentManualGenerator} and set the ID property of the affected object
- * yourself. Alternatively you can implement your own {@link
- * ezcPersistentIdentifierGenerator} to perform this operation consistently.
- *
- * The default value for the ID should be null, since {@link
- * ezcPersistentSession::save()} determines if an object was already saved this
- * way for integer IDs.
- *
- * For descriptions for some the constants used in this class see:
- * {@link ezcPersisentObjectProperty}
- *
- * @property string $columnName The name of the database field that stores the
- * value.
- * @property string $propertyName The name of the PersistentObject property
- * that holds the value in the PHP object.
- * @property int $propertyType The type of the PHP property. See class
- * constants ezcPersistentObjectProperty::PHP_TYPE_*.
- * @property int $visibility The visibility of the property. This property is deprecated!
- * @property ezcPersistentGeneratorDefinition $generator
- * The type of generator to use for the identifier.
- * The identifier generator must be an object that extends the
- * abstract class ezcPersistentIdentifierGenerator. The current
- * options that are part of this package are:
- * - ezcPersistentSequenceGenerator
- * - ezcPersistentManualGenerator
- * - ezcPersistentNativeGenerator
- * @property int $databaseType
- * Type of the database column, as defined by PDO constants: {@link
- * PDO::PARAM_BOOL}, {@link PDO::PARAM_INT}, {@link PDO::PARAM_STR}
- * (default as defined by {@link ezcQuery::bindValue()}) or {@link
- * PDO::PARAM_LOB} (important for binary data).
- *
- * @package PersistentObject
- * @version //autogen//
- */
- class ezcPersistentObjectIdProperty
- {
- /**
- * Holds the properties for this class.
- * @var array
- */
- private $properties = array(
- 'columnName' => null,
- 'resultColumnName' => null,
- 'propertyName' => null,
- 'propertyType' => ezcPersistentObjectProperty::PHP_TYPE_INT,
- 'generator' => null,
- 'visibility' => null,
- 'databaseType' => PDO::PARAM_STR,
- );
- /**
- * Constructs a new PersistentObjectField
- *
- * @param string $columnName The name of the database field that stores the value.
- * @param string $propertyName The name of the class member
- * @param int $visibility See {@link $visibility} for possible values.
- * @param ezcPersistentGeneratorDefinition $generator Definition of the identifier generator
- * @param int $propertyType See {@link ezcPersistentObjectProperty} for possible values.
- * @param int $databaseType See {@link PDO::*} for possible values.
- */
- public function __construct(
- $columnName = null,
- $propertyName = null,
- $visibility = null,
- ezcPersistentGeneratorDefinition $generator = null,
- $propertyType = ezcPersistentObjectProperty::PHP_TYPE_INT,
- $databaseType = PDO::PARAM_STR
- )
- {
- $this->columnName = $columnName;
- $this->propertyName = $propertyName;
- $this->visibility = $visibility;
- $this->generator = $generator;
- $this->propertyType = $propertyType;
- $this->databaseType = $databaseType;
- }
- /**
- * Property read access.
- *
- * @param string $propertyName Name of the property.
- * @return mixed Value of the property or null.
- *
- * @throws ezcBasePropertyNotFoundException
- * If the the desired property is not found.
- * @ignore
- */
- public function __get( $propertyName )
- {
- if ( $this->__isset( $propertyName ) )
- {
- return $this->properties[$propertyName];
- }
- throw new ezcBasePropertyNotFoundException( $propertyName );
- }
- /**
- * Property write access.
- *
- * @param string $propertyName Name of the property.
- * @param mixed $propertyValue The value for the property.
- *
- * @throws ezcBasePropertyNotFoundException
- * If a the value for the property options is not an instance of
- * @throws ezcBaseValueException
- * If a the value for a property is out of range.
- * @ignore
- */
- public function __set( $propertyName, $propertyValue )
- {
- switch ( $propertyName )
- {
- case 'columnName':
- if ( is_string( $propertyValue ) === false && is_null( $propertyValue ) === false )
- {
- throw new ezcBaseValueException(
- $propertyName,
- $propertyValue,
- 'string or null'
- );
- }
- $this->properties['resultColumnName'] = ( $propertyValue !== null ) ? strtolower( $propertyValue ) : null;
- break;
- case 'propertyName':
- if ( is_string( $propertyValue ) === false && is_null( $propertyValue ) === false )
- {
- throw new ezcBaseValueException(
- $propertyName,
- $propertyValue,
- 'string or null'
- );
- }
- break;
- case 'propertyType':
- case 'visibility':
- if ( is_int( $propertyValue ) === false && is_null( $propertyValue ) === false )
- {
- throw new ezcBaseValueException(
- $propertyName,
- $propertyValue,
- 'int or null'
- );
- }
- break;
- case 'generator':
- if ( ( is_object( $propertyValue ) === false || ( $propertyValue instanceof ezcPersistentGeneratorDefinition ) === false ) && is_null( $propertyValue ) === false )
- {
- throw new ezcBaseValueException(
- $propertyName,
- $propertyValue,
- 'ezcPersistentGeneratorDefinition or null'
- );
- }
- break;
- case 'databaseType':
- if ( $propertyValue !== PDO::PARAM_STR && $propertyValue !== PDO::PARAM_LOB && $propertyValue !== PDO::PARAM_INT && PDO::PARAM_BOOL )
- {
- throw new ezcBaseValueException(
- $propertyName,
- $propertyValue,
- 'PDO::PARAM_STR, PDO::PARAM_LOB, PDO::PARAM_INT or PDO::PARAM_BOOL'
- );
- }
- break;
- default:
- throw new ezcBasePropertyNotFoundException( $propertyName );
- break;
- }
- $this->properties[$propertyName] = $propertyValue;
- }
- /**
- * Property isset access.
- *
- * @param string $propertyName Name of the property.
- * @return bool True is the property is set, otherwise false.
- * @ignore
- */
- public function __isset( $propertyName )
- {
- return array_key_exists( $propertyName, $this->properties );
- }
- /**
- * Returns a new instance of this class with the data specified by $array.
- *
- * $array contains all the data members of this class in the form:
- * array('member_name'=>value).
- *
- * __set_state makes this class exportable with var_export.
- * var_export() generates code, that calls this method when it
- * is parsed with PHP.
- *
- * @param array(string=>mixed) $array
- * @return ezcPersistentObjectIdProperty
- */
- public static function __set_state( array $array )
- {
- if ( isset( $array['properties'] ) && count( $array ) === 1 )
- {
- return new ezcPersistentObjectIdProperty(
- $array['properties']['columnName'],
- $array['properties']['propertyName'],
- $array['properties']['visibility'],
- $array['properties']['generator'],
- ( isset( $array['properties']['databaseType'] ) ? $array['properties']['databaseType'] : PDO::PARAM_STR )
- );
- }
- else
- {
- return new ezcPersistentObjectIdProperty(
- $array['columnName'],
- $array['propertyName'],
- $array['visibility'],
- $array['generator'],
- ( isset( $array['databaseType'] ) ? $array['databaseType'] : PDO::PARAM_STR )
- );
- }
- }
- }
- ?>