phpgt/propfunc

属性访问器和修改器函数。

维护者

详细信息

github.com/PhpGt/PropFunc

源代码

问题

资助包维护!
PhpGt

v1.0.1 2021-03-23 12:46 UTC

README

属性访问器和修改器通常被称为“获取器”和“设置器”函数。这个库使用PHP的魔术方法,通过MagicProp特质,轻松地将外部暴露的作为正常属性的获取器和设置器函数挂载起来。

为什么?这种功能当然可以被视为一种变通方法,但有时候变通方法是必要的。具体来说,PHP.Gt正在实现PHP中的DOM标准,这要求某些属性必须具有“实时”或“只读”功能,而这只有使用魔术__get和__set函数才能实现。这个库简单地持有可重用的行为,供其他需要它的仓库使用。

Build status Code quality Code coverage Current version PHP.Gt/PropFunc documentation

示例用法:在访问时计算的可读属性

请看下面的Day类,它代表时间中的某一天

use Gt\PropFunc\MagicProp;

/**
 * @property-read bool $future True if the day is in the future
 * @property-read int $daysApart Days between now and this day
 */
class Day {
	use MagicProp;
	
	public function __construct(
		private DateTimeInterface $dateTime
	) {}
	
// Expose the "dateTime" private property with read-only access:
	private function __prop_get_dateTime():DateTimeInterface {
		return $this->dateTime;
	}
	
// Expose the "future" calculated property with read-only access:
	private function __prop_get_future():bool {
		$now = new DateTime();
		return $now < $this->dateTime;
	}
	
// Expose the "daysApart" calculated property with read-only access:
	private function __prop_get_daysApart():int {
		$now = new DateTime();
		$diff = $now->diff($this->dateTime);
		return $diff->days;
	}
}

请看下面的代码,它使用了Day类。它可以访问属性,但不能修改它们。

$day = new Day($dateTime);
echo "Day is $day->diff days in the ";
echo $day->future ? "future" : "past";
echo PHP_EOL;
$day->diff = 10;
echo "Exception thrown on line above!";

用法

  • 只读属性 - 与上述示例一样,属性可以是只读的。这个特性即将在PHP语言中实现,但没有定义访问器逻辑的能力。
  • 实时属性 - 如果一个属性的值需要根据某些条件更新,则需要一个获取器函数。
  • 属性验证 - 如果一个属性的值不能仅通过其类型进行简单验证,可以使用设置器函数来确保该值符合验证标准。