gpt4 book ai didi

c# - 像 C# 中那样处理 PHP 属性(getter 和 setter)

转载 作者:可可西里 更新时间:2023-10-31 22:10:24 25 4
gpt4 key购买 nike

我一直在做一些研究,想知道在 PHP 类中使用属​​性是否可以像 C# 一样完成,我发现这些问题有一些很好的答案和指针,但并没有真正帮助我:

虽然,正如我所说,这些给出了很好的答案,但我仍然无法就这些下定决心,例如,我希望能够做一些事情,例如:

class Foo 
{
public $bar
{
get { return $this->bar; }
set { $this->bar = value; }
}
}

但是我做不到!

在 PHP 的限制下执行此操作的最佳方法是什么?

我能想到的是这样的:

class user
{
private static $link;
private static $init;

private function __construct ()
{
global $link;
static::$link = $link;
}

public static function __INIT__ ()
{
return static::$init = (null === static::$init ? new self() : static::$init);
}

public static $username;

public function username( $value = '' )
{
if ( $value == '' || empty ( $value ) || !$value )
return static::$username;
else
static::$username = $value;
}
}

最佳答案

这就是 PHP 魔术方法的用途。它们允许您通过中介方法动态设置属性。在这里,让我给你举个例子:

abstract class GetterSetterExample
{
public function __get($name)
{
$method = sprintf('get%s', ucfirst($name));

if (!method_exists($this, $method)) {
throw new Exception();
}

return $this->$method();
}

public function __set($name, $v)
{
$method = sprintf('set%s', ucfirst($name));

if (!method_exists($this, $method)) {
throw new Exception();
}

$this->$method($v);
}
}

class Cat extends GetterSetterExample
{
protected $furColor;

protected function getFurColor()
{
return $this->furColor;
}

protected function setFurColor($v)
{
$this->furColor = $v;
}
}

$cat = new Cat();
$cat->furColor = 'black';

是的......它也让我害怕。

这就是为什么大多数人都满足于使用像 Cat 中那样的方法,但是是公开的。显然有关于添加“真正的”getter 和 setter 的讨论,但是那些出于可读性、语义和原则的考虑而讨厌它们的人之间似乎存在很多冲突......

关于c# - 像 C# 中那样处理 PHP 属性(getter 和 setter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33632621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com