【问题标题】:Explaining this and self to people learning PHP's OOP Design [closed]向学习 PHP 的 OOP 设计的人解释这一点和自我 [关闭]
【发布时间】:2014-06-18 23:58:26
【问题描述】:

我正在尝试教一些朋友 PHP,我正忙于解释 $this-> 如何在没有技术术语的情况下工作。我相信一旦我让他们理解了这些,我就可以真正开始教他们如何使用 OOP 进行编码了。

我所教的人了解如何使用类、变量,以及它们如何使用extendspublicprivateprotected 函数和变量范围进行交互。

唯一阻碍他们的是向他们解释$this->self::。我试图通过说“当你引用一个类变量时,你将在函数中使用 $this-> 调用它”来把它弄糊涂,指的是类的变量,因为我们在类而不是函数本身。

有没有更好、更简单的方法向正在学习 PHP 的 OOP 设计的人解释这一点?

我还注意到,一旦您进入编程语言,您就会习惯使用这些方法而无需考虑它们。对我来说,如果不使用技术术语来解释如何使用这些方法,就很难回到基础。

【问题讨论】:

  • 我认为,如果不首先解释 OOP 的基础知识,就无法教授 PHP 的 $this 的概念。这是一个只有在适当的上下文中才有意义的概念。
  • A.爱因斯坦:If you can't explain it to a six year old, you don't understand it yourself
  • 他们了解 OOP 设计的工作原理,但他们只是对 OOP 的 $this-> 部分感到困惑。我相信,一旦我让他们解决了这个小小的理解问题,我就可以继续为他们提供更多帮助。
  • $this指的是对象内部的一个对象的内部变量和方法。我想解释封装以及为什么这样做会更难;)

标签: php oop this


【解决方案1】:

当你有一个类 - 现有对象 - 示例:

class Object
{
     protected $variable;

     public function method($param) {}
}

$this 只是告诉ME 的一种方式。

例如,当你开始吃东西时,你会这样做

ME::getSpoon();
ME::UseSPoonToFetchSoup();
ME::BringSpoonToMouth();
ME::PutSpoonInMouth();
ME::TakeSpoonOut();
ME::Swallow():

然后重复一些步骤。 ME 是您自己的参考。如果你考虑一下 - 这个算法几乎适用于每个人,每个现有的 ppl 都可以使用它 - 只要记住 ME 是实际的,人类用勺子吃汤。

对象也是如此。在此示例中,如果您将代码更改为

class Object
{
     protected $variable = 0;

     public function method($param = 1) {$this->variable += $param; return $this->variable;}
}

不带参数的执行方法method(); 将添加到$variable 1 的对象OWN 内存位置,然后告诉您新的总和。

$obj1 = new Object();
$obj2 = new Object();

echo "Obj1: " .$obj->method(10).'<br/>'; //this will print 10
echo "Obj2: " .$obj->method(2).'<br/>'; //;this will print 2

这个对象必须知道who they are,因此需要知道自己的引用,这就是$this的相同之处。

希望这个解释很容易理解。

【讨论】:

  • 请 - 如果你不赞成 - 留下评论为什么。
【解决方案2】:

你可以试试这样的:

每辆车都有燃料 ($fuel)。

但是如果你在你的车里,你不想知道其他车的燃料,你想知道你车的燃料。

所以你喜欢$this-&gt;fuel

我认为这应该足够简单而不会损失太多准确性。

【讨论】:

  • 根据您的回答,它可用于查找型号 ($this-&gt;model)、制造年份 ($this-&gt;year) 和颜色 ($this-&gt;colour)。仅查找有关您的汽车的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 2014-08-21
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多