理解PHP类

时间:2012-09-09 15:01:18

标签: php object built-in

我试图理解PHP中的内置类以及如何使用它们。我也试图用正确的语言来描述这些“事物”。以DateTime类为例。

所以现在我在这个类上看到一个方法,它由DateTime :: setDate表示。所以我说的是,“这是DateTime类有一个名为setDate的方法吗?另外如果您在setDate的DateTime类上阅读PHP手册,您会发现:

DateTime :: setDate< - 这是否意味着我可以在代码中使用它?如: 日期时间::的setDate(); ?

我确实看到如何创建一个对象,如下所示:

<?php
$date = new DateTime();
$date->setDate(2001, 2, 3);
echo $date->format('Y-m-d');// how would you know to do this? I thought $date->year;
?>

这来自于此: public DateTime DateTime :: setDate(int $ year,int $ month,int $ day)

同样从上面的一行我应该能够弄清楚如何在不看示例的情况下使用它?

非常感谢任何好的投入。

谢谢, 吉姆

4 个答案:

答案 0 :(得分:1)

除非方法被表示为static,否则无法classname::methodname();的代码中调用它。在代码描述中,::基本上只是说'此方法属于此类'。是的,这有点令人困惑。

答案 1 :(得分:1)

我只是讨厌参考中的::符号,我一直认为我正在处理长静态方法列表。

无论如何,它来自C++ namespaces notation,因此DateTime::diff应该被理解为“函数diff属于类DateTime”,但它似乎很清楚因为我是在DateTime参考页面上!

为了更清楚,“双冒号”运算符被称为T_PAAMAYIM_NEKUDOTAYIM [实际上是双冒号的希伯来语]。

长话短说,除非您在方法签名中阅读 static 关键字,否则请使用->表示法。

答案 2 :(得分:0)

实际上我从来没有理解他们为什么在文档中使用::运算符而我发现它令人困惑。

但是当文档说DateTime::setDate时,这意味着这是方法定义。您必须首先使用以下代码实例化该类:

$instance = new DateTime();

然后在实例上调用方法:

$instance->setDate($dateString);

这是方法在类对象上的工作方式,它写成Classe::method

答案 3 :(得分:0)

从PHP帮助你可以找到这个表达式:“有时引用基类中的函数和变量或引用尚未有任何实例的类中的函数是有用的。::运算符正用于此。 “
::运算符用于调用基类的函数,并忽略由基类覆盖该方法的类。

<?php
class A {
    function example() {
        echo "I am the original function A::example().<br />\n";
    }
}

class B extends A {
    function example() {
        echo "I am the redefined function B::example().<br />\n";
        A::example();
    }
}

// there is no object of class A.
// this will print
//   I am the original function A::example().<br />
A::example();

// create an object of class B.
$b = new B;

// this will print 
//   I am the redefined function B::example().<br />
//   I am the original function A::example().<br />
$b->example();
?>