澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

浅谈PHP的反射机制_php基础_脚本之家,使用PHP反射

反射是指在PHP运市场价格况中,扩展解析PHP程序,导出或提抽出有关类、方法、属性、参数等的详细消息,包罗注释。这种动态获取的音信以及动态调用对象的法门的效能称为反射API。反射是决定面向对象范型瓜月模型的API,其职能拾壹分强有力,可支持大家创设复杂,可扩充的运用。

class Person { /** * For the sake of demonstration, we"re setting this private */ private $_allowDynamicAttributes = false; /** type=primary_autoincrement */ protected $id = 0; /** type=varchar length=255 null */ protected $name; /** type=text null */ protected $biography; publicfunction getId() { return $this->id; } public function setId { $this->id = $v; } public function getName() { return $this->name; } public function setName { $this->name = $v; } public function getBiography() { return $this->biography; } public function setBiography { $this->biography = $v; } }Persion

反射api是php内建的oop才具扩大,包涵部分类,相当和接口,综合应用他们可用来增派我们剖析任何类,接口,方法,属性,方法和扩张。这么些oop扩大被喻为反射。

 $instance->getBiography(); //执行Person 里的方法getBiography //或者: $ec=$class->getmethod; //获取Person 类中的getName方法 $ec->invoke; //执行getName 方法
 * @copyright 2010 Chris Tankersley * @package PhpORM_Cli */class PhpORM_Cli_GenerateSql{ /** * Use a MySQL database */ const MYSQL = 'mysql'; /** * Use a SQLite database */ const SQLITE = 'sqlite'; /** * Types that are allowed to have a length * @var array */ protected $_hasLength = array; /** * Regexes needed to pull out the different comments * @var array */ protected $_regexes = array( 'type' => '/ type= /', 'length' => '/ length= /', 'default' => '/ default="" /', 'null' => '/ null /', ); /** * Types that we support * @var array */ protected $_validTypes = array( 'boolean' => 'BOOL', 'date' => 'DATE', 'integer' => 'INT', 'primary_autoincrement' => 'INT AUTO_INCREMENT PRIMARY KEY', 'text' => 'TEXT', 'timestamp' => 'TIMESTAMP', 'varchar' => 'VARCHAR', ); /** * Name of the class we will interperet * @var string */ protected $_className; /** * Name of the table we are generating * @var string */ protected $_tableName; /** * The type of database we are generating * @var string */ protected $_type; /** * Sets the name of the class we are working with * @param string $class * @param string $table_name * @param string $type */ public function __construct($class, $table_name, $type = self::MYSQL) { $this->_className = $class; $this->_tableName = $table_name; $this->_type = $type; } /** * Builds an SQL Line for a property * @param ReflectionProperty $property * @return string */ protected function _getDefinition { $type = ''; $length = ''; $null = ''; preg_match($this->_regexes['type'], $property->getDocComment; if { if(array_key_exists($matches[1], $this->_validTypes)) { $type = $this->_validTypes[$matches[1]]; if(in_array($matches[1], $this->_hasLength)) { $length = $this->_getLength; } if($matches[1] != 'primary_autoincrement') { $null = $this->_getNull; } $sql = '`'.$property->getName().'` '.$type.' '.$length.' '.$null; return $sql; } else { throw new Exception('Type "'.$matches[1].'" is not a supported SQL type'); } } else { throw new Exception('Found '.count.' when checking Type for property '.$property->getName; } } /** * Extracts the Length from a property * @param ReflectionProperty $property * @return string */ protected function _getLength { preg_match($this->_regexes['length'], $property->getDocComment; if { return ''; } else { return ''; } } /** * Determines if a Property is allowed to be null * @param ReflectionProperty $property * @return string */ protected function _getNull { preg_match($this->_regexes['null'], $property->getDocComment; if { return 'NULL'; } else { return 'NOT NULL'; } } /** * Generates a block of SQL to create a table from an Entity * @return string */ public function getSql() { $class = new ReflectionClass; $definitions = array(); foreach($class->getProperties { if(strpos, '_') === false) { $definitions[] = $this->_getDefinition; } } $columns = implode; $sql = "CREATE TABLE ".$this->_tableName." "; if($this->_type == self::MYSQL) { $sql .= " ENGINE=MYISAM"; } return $sql.";"; }}

3)方法 Method Names静态

上面包车型大巴主次接受Reflection来布局"CREATE TABLE"的sql语句。要是你不是很了解反射机制,能够从这些顺序中看看反射的魅力与作用。

2.1)

php反射api由若干类组成,可扶助大家用来做客程序的元数据依旧同有关的注释交互作用。依据反射我们可以得到诸如类完毕了那几个方法,创造叁个类的实例,调用叁个方法,传递参数,动态调用类的静态方法。

反射api是php内建的oop技艺扩充,包含一些类,分外和接口,综合运用他们可用来赞助我们深入分析任何类,接口,方法,属性,方法和强盛。那几个oop扩张被叫作反射。

总结

接下去反射它,只要把类名"Person"传递给ReflectionClass就能够了:

上述便是那篇小说的全部内容了,希望本文的内容对大家的求学或然办事具备自然的参照他事他说加以侦察学习价值,感谢我们对台本之家的扶持。假如你想打听越来越多相关内容请查看上面相关链接

收获情势:通过getMethods() 来获取到类的具有methods。

其用场如:自动加载插件,自动生成文书档案,以致可用来扩展PHP语言。

通过$property->getName()可以获得属性名。

2.3.4)

开创多个Person类,然后选取ReflectionClass反射它

2.3.3)

透过getDocComment能够收获写给property的评释。

5卡塔尔命名空间 Namespace

6)Person类是否为final可能abstract

2.3.2)

2)属性 Property Names

如上就是本文的全体内容,希望本文的剧情对大家的学习也许干活能拉动一定的支持,同不经常间也希望不吝赐教脚本之家!

1)常量 Contants

本文由澳门皇冠金沙网站发布于编辑程序,转载请注明出处:浅谈PHP的反射机制_php基础_脚本之家,使用PHP反射