| <?php |
| /** |
| * File containing the ezcPersistentObjectProperty 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 field. |
| * |
| * An instance of this class is used in a {@link ezcPersisentObjectDefinition} |
| * object to define a relation between an object property and a database |
| * column. |
| * |
| * @see ezcPersisentObjectDefinition |
| * |
| * @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 PHP_TYPE_*. |
| * @property ezcPersistentPropertyConverter|null $converter |
| * A converter object that will automatically perform converters on |
| * load and save of a property value. |
| * @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 ezcPersistentObjectProperty |
| { |
| |
| const PHP_TYPE_STRING = 1; |
| const PHP_TYPE_INT = 2; |
| const PHP_TYPE_FLOAT = 3; |
| const PHP_TYPE_ARRAY = 4; |
| const PHP_TYPE_OBJECT = 5; |
| const PHP_TYPE_BOOL = 6; |
| |
| /** |
| * Holds the properties for this class. |
| * |
| * @var array |
| */ |
| private $properties = array( |
| 'columnName' => null, |
| 'resultColumnName' => null, |
| 'propertyName' => null, |
| 'propertyType' => self::PHP_TYPE_STRING, |
| 'converter' => null, |
| 'databaseType' => PDO::PARAM_STR, |
| ); |
| |
| /** |
| * Creates a new property definition object. |
| * |
| * Creates a new property definition object from the given values. The |
| * $columnName refers to the name of the database column that, the |
| * $propertyName to the name of the PHP object property it refers to. |
| * The $type defines the type of the resulting PHP property, the database |
| * value will be casted accordingly after load. |
| * |
| * @param string $columnName |
| * @param string $propertyName |
| * @param int $type |
| * @param ezcPersistentPropertyConverter $converter |
| * @param int $databaseType |
| */ |
| public function __construct( |
| $columnName = null, |
| $propertyName = null, |
| $type = self::PHP_TYPE_STRING, |
| $converter = null, |
| $databaseType = PDO::PARAM_STR |
| ) |
| { |
| $this->columnName = $columnName; |
| $this->propertyName = $propertyName; |
| $this->propertyType = $type; |
| $this->converter = $converter; |
| $this->databaseType = $databaseType; |
| } |
| |
| /** |
| * 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 ezcPersistentObjectProperty |
| */ |
| public static function __set_state( array $array ) |
| { |
| if ( isset( $array['properties'] ) ) |
| { |
| return new ezcPersistentObjectProperty( |
| $array['properties']['columnName'], |
| $array['properties']['propertyName'], |
| $array['properties']['propertyType'], |
| ( isset( $array['properties']['converter'] ) ? $array['properties']['converter'] : null ), |
| ( isset( $array['properties']['databaseType'] ) ? $array['properties']['databaseType'] : PDO::PARAM_STR ) |
| ); |
| } |
| else |
| { |
| // Old style exports |
| return new ezcPersistentObjectProperty( |
| $array['columnName'], |
| $array['propertyName'], |
| $array['propertyType'], |
| ( isset( $array['converter'] ) ? $array['converter'] : null ), |
| ( isset( $array['databaseType'] ) ? $array['databaseType'] : PDO::PARAM_STR ) |
| ); |
| } |
| } |
| |
| /** |
| * 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': |
| if ( is_int( $propertyValue ) === false && is_null( $propertyValue ) === false ) |
| { |
| throw new ezcBaseValueException( |
| $propertyName, |
| $propertyValue, |
| 'int or null' |
| ); |
| } |
| break; |
| case 'converter': |
| if ( !( $propertyValue instanceof ezcPersistentPropertyConverter ) && !is_null( $propertyValue ) ) |
| { |
| throw new ezcBaseValueException( |
| $propertyName, |
| $propertyValue, |
| 'ezcPersistentPropertyConverter or null' |
| ); |
| } |
| break; |
| case 'databaseType': |
| if ( $propertyValue !== PDO::PARAM_STR && $propertyValue !== PDO::PARAM_LOB && $propertyValue !== PDO::PARAM_INT && $propertyValue !== 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 ); |
| } |
| |
| |
| /** |
| * @apichange Never used but left for BC reasons. Will be removed on next |
| * major version. |
| */ |
| const VISIBILITY_PRIVATE = 1; |
| |
| /** |
| * @apichange Never used but left for BC reasons. Will be removed on next |
| * major version. |
| */ |
| const VISIBILITY_PROTECTED = 2; |
| |
| /** |
| * @apichange Never used but left for BC reasons. Will be removed on next |
| * major version. |
| */ |
| const VISIBILITY_PUBLIC = 3; |
| |
| /** |
| * @apichange Never used but left for BC reasons. Will be removed on next |
| * major version. |
| */ |
| const VISIBILITY_PROPERTY = 4; |
| } |
| ?> |