【问题标题】:How __get and __set PHP functions can be suppressed如何抑制 __get 和 __set PHP 函数
【发布时间】:2016-06-09 02:34:29
【问题描述】:

有没有办法抑制 PHP 中的 __get__set 函数?显然,它们没有定义就存在。 PHP 4.x、5.x 和 7.x 版本之间有何区别?

这是我的代码。 2 个文件,

//文件1.php

<?php
namespace N;

class File1
{
    public $name;
}

//文件2.php

<?php

require 'File1.php';

$a = new \N\File1();
$a->name1 = 'Avian Carrier';
echo $a->name1;

?>

还在回响“鸟航母”吗?

【问题讨论】:

  • “没有定义就存在”
  • 它们默认不存在,不。 @jszobody 我认为他的意思是它们隐式存在(继承)
  • 我建议展示一些代码。看来您正在做一些您认为不可能的事情,也许可以告诉我们具体是什么?
  • 看来你是对的,这些神奇的方法是默认启用的。查看来自this question 的答案。它建议只用空主体定义 __set 魔术方法。我自己尝试过,它看起来很有效(我在尝试设置未定义的属性时收到了通知)。如果你愿意,你也可以让它抛出一个异常。

标签: php


【解决方案1】:

当你说它们默认存在时你错了——它们必须由开发者定义。

您可以在官方文档中获得更多详细信息:http://php.net/manual/en/language.oop5.overloading.php#object.get

这些“神奇”的方法是在 PHP5 中引入的,根据更改日志,它们从那以后就没有改变过。

逻辑非常简单——如果你试图访问一个对象上一个不可访问的属性并且该对象有一个 __get() 方法,PHP 将使用单个参数调用该方法,一个属性名。与 __set() 相同。

这些方法允许您引入通常称为魔法属性的东西。

在您实施它们之前它们不存在。

【讨论】:

  • 请帮助我理解,因为我访问了一个未定义的属性并且没有实现 __get 或 __set 我能够回显该属性,我肯定在这里遗漏了一些东西。
  • 请显示代码摘录?你应该收到了来自 PHP 的错误
【解决方案2】:

这些都是神奇的方法,你可以用也可以不用。没有办法“压制”属于语言的一部分。参考:http://php.net/manual/en/language.oop5.magic.php

【讨论】:

  • 他们没有定义就执行?
  • 您需要声明它们以执行,例如当您声明 __get 并尝试获取一个名称未在类上声明的属性时,如果将执行魔术 __get 方法,所以它有助于在不需要公开所有属性的情况下获取内容,还可以检查访问权限等。理解这一点的最简单方法是对其进行测试:php.net/manual/en/language.oop5.overloading.php#object.get
【解决方案3】:

__get 和 __set 不能被抑制,它们是 PHP 语言方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2010-12-09
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多