Current File : //opt/RZphp74/includes/CodeGen/PECL/Element/Property.php |
<?php
/**
* Class describing a class property within a PECL extension
*
* PHP versions 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category Tools and Utilities
* @package CodeGen
* @author Hartmut Holzgraefe <hartmut@php.net>
* @copyright 2005-2008 Hartmut Holzgraefe
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Property.php,v 1.8 2006/10/10 07:18:46 hholzgra Exp $
* @link http://pear.php.net/package/CodeGen
*/
/**
* includes
*/
require_once "CodeGen/PECL/Element.php";
require_once "CodeGen/PECL/Element/Function.php";
require_once "CodeGen/PECL/Element/Class.php";
/**
* Class describing a class property within a PECL extension
*
* @category Tools and Utilities
* @package CodeGen
* @author Hartmut Holzgraefe <hartmut@php.net>
* @copyright 2005-2008 Hartmut Holzgraefe
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version Release: @package_version@
* @link http://pear.php.net/package/CodeGen
*/
class CodeGen_PECL_Element_Property
extends CodeGen_PECL_Element
{
/**
* Is this an abstract property?
*
* @var bool
*/
protected $isAbstract = false;
function isAbstract()
{
$this->isAbstract = true;
}
/**
* Is this an interface property?
*
* @var bool
*/
protected $isInterface = false;
function isInterface()
{
$this->isInterface = true;
}
/**
* Is this a final property?
*
* @var bool
*/
protected $isFinal = false;
function isFinal()
{
$this->isFinal = true;
}
/**
* Is this a static property?
*
* @var bool
*/
protected $isStatic = false;
function isStatic()
{
$this->isStatic = true;
}
/**
* Visibility of this property
*
* @var string
*/
protected $access = "public";
function setAccess($access)
{
switch ($this->access) {
case "private":
case "protected":
case "public":
$this->access = $access;
return true;
default:
return PEAR::raiseError("'$access' is not a valid access property");
}
}
/**
* Property type
*
* @var string
*/
protected $type = "null";
function setType($type)
{
switch ($type) {
case "int":
case "long":
$this->type = "long";
break;
case "float":
case "double":
$this->type = "double";
break;
case "string":
$this->type = "string";
break;
case "null":
case "void":
$this->type = "null";
break;
default:
return PEAR::raiseError("'$type' is not a valid property type");
}
return true;
}
/**
* Property name
*
* @var string
*/
protected $name = "unknown";
function setName($name)
{
if (!$this->isName($name)) {
return PEAR::raiseError("'$name' is not a valid property name");
}
$this->name = $name;
return true;
}
function getName()
{
return $this->name;
}
/**
* Default value
*
* @var string
* @access private
*/
protected $value = "";
function setValue($value)
{
// TODO check?
$this->value = $value;
return true;
}
/**
* MINIT code fragment
*
* @access public
* @return string
*/
function minitCode($classptr)
{
$code = $this->ifConditionStart();
$code.= " zend_declare_property_{$this->type}({$classptr}, \n";
$code.= ' "' . $this->name . '", ' . strlen($this->name) . ", ";
switch ($this->type) {
case "string":
$code .= '"'.$this->value.'", ';
break;
case "long":
case "double":
// TODO zend_declare_property_double only available in 5.1? add a configure check for this?
$code .= $this->value.", ";
break;
default:
break;
}
$code.= "\n ZEND_ACC_".strtoupper($this->access);
if ($this->isStatic) {
$code.= " | ZEND_ACC_STATIC";
}
if ($this->isAbstract) {
$code.= " | ZEND_ACC_ABSTRACT";
}
if ($this->isInterface) {
$code.= " | ZEND_ACC_INTERFACE";
}
if ($this->isFinal) {
$code.= " | ZEND_ACC_FINAL";
}
$code .= " TSRMLS_DC);\n\n";
$code.= $this->ifConditionEnd();
return $code;
}
}
?>