zeptech / opal
生成伴随对象
1.0.2
2013-05-30 14:20 UTC
Requires
- php: >=5.3.0
- zeptech/code-templates: 2.0.*
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2024-09-23 11:45:00 UTC
README
生成和实例化PHP伴随对象。伴随对象基于两个输入生成,一个类定义和一个伴随对象模板。模板文档可以在php-code-templates的GitHub站点找到。
示例
给定一个伴随模板(Validator.tmpl.php)
<?php
namespace my\dyn\ns;
/**
* Simple validator that ensures that there are no null properties.
*/
class /*# modelName */Validator {
/**
* Validate the given model.
*
* @return true of all properties are non-null, false otherwise.
*/
public function validate(/*# modelFq */ $model) {
#{ each properties as prop
if ($model->get/*# prop #/() === null) {
return false;
}
#}
return true;
}
}
和一个生成器实现
<?php
namespace my\ns;
use \zpt\gen\CompanionGenerator;
/**
* A class generator for model validators.
*/
class ValidatorGenerator extends CompanionGenerator {
public static $companionNs = 'my\dyn\ns';
/**
* @Override
*/
public function getCompanionNamespace() {
return self::$companionNs;
}
/**
* @Override
*/
public function getTemplatePath() {
return __DIR__ . '/Validator.tmpl.php';
}
/**
* @Override
*/
public function getValues($className) {
$values = array();
$refClass = new ReflectionClass($className);
$properties = array();
foreach ($refClass->getMethods() as $method) {
if (substr($method->getName(), 0, 3) === 'get') {
$properties[] = substr($method->getName(), 3));
}
}
$values['properties'] = $properties;
return $values;
}
}
现在可以使用以下方式生成SomeClass的伴随对象
<?php
$companionGenerator = new ValidatorGenerator($outputPath);
$companionGenerator->generate('SomeClass');
它们可以用以下方式实例化(将my\dyn\ns
添加到自动加载器中)
<?php
$companionLoader = new CompanionLoader($outputPath);
$validator = $companionLoader->get(
ValidatorGenerator::$actorNamespace,
'SomeClass'
);
或者
<?php
class ValidatorLoader extends CompanionLoader {
public function loadFor($class) {
return parent::get(ValidatorGenerator::$actorNs, 'SomeClass');
}
}
(new ValidatorLoader)->loadFor('SomeClass');