ÿ����Ķ��嶼�Թؼ��� class ��ͷ����������������������һ�Ի����ţ������������������뷽���Ķ��塣
�����������κη� PHP �������ĺϷ���ǩ��һ���Ϸ���������ĸ���»��߿�ͷ���������������ĸ�����ֻ��»��ߡ���������ʽ��ʾΪ��[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*��
һ����������������Լ�����������������Ϊ"����"���Լ���������Ϊ"����"����
Example #1 ���ඨ��
<?php
class SimpleClass
{
// ��������
public $var = 'a default value';
// ��������
public function displayVar() {
echo $this->var;
}
}
?>
��һ���������ඨ���ڲ�������ʱ����һ�����õ�α���� $this��$this ��һ�������ж�������ã�ͨ���Ǹ÷����������Ķ�������Ǵӵڶ���������̬����ʱҲ��������һ������
Example #2 $this α������ʾ��
We're assuming that error_reporting is disabled for this example; otherwise the following code would trigger deprecated and strict notices, respectively, depending on the PHP version.
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
Output of the above example in PHP 5:
$this is defined (A) $this is not defined. $this is defined (B) $this is not defined.
Output of the above example in PHP 7:
$this is defined (A) $this is not defined. $this is not defined. $this is not defined.
Ҫ����һ�����ʵ��������ʹ�� new �ؼ��֡��������¶���ʱ�ö������DZ���ֵ�����Ǹö����������캯�������ڳ���ʱ�׳���һ���쳣����Ӧ�ڱ�ʵ����֮ǰ���壨ijЩ������������������
����� new ֮����ŵ���һ���������������ַ��� string��������һ��ʵ���������������������һ�������ռ䣬�����ʹ�����������ơ�
Example #3 ����ʵ��
<?php
$instance = new SimpleClass();
// Ҳ������������
$className = 'Foo';
$instance = new $className(); // Foo()
?>
���ඨ���ڲ��������� new self �� new parent �����¶���
����һ�������Ѿ�������ʵ������һ���±���ʱ���±��������ͬһ��ʵ�����ͺ��øö���ֵһ��������Ϊ������������ʵ��ʱһ������������¡��һ���Ѵ����Ķ�����һ����ʵ����
Example #4 ����ֵ
<?php
$instance = new SimpleClass();
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
�������̻������
NULL NULL object(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned will have this value" }
PHP 5.3.0 �����������·���������һ�������ʵ����
Example #5 �����¶���
<?php
class Test
{
static public function getNew()
{
return new static;
}
}
class Child extends Test
{}
$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);
$obj3 = Test::getNew();
var_dump($obj3 instanceof Test);
$obj4 = Child::getNew();
var_dump($obj4 instanceof Child);
?>
�������̻������
bool(true) bool(true) bool(true)
PHP 5.4.0 �𣬿���ͨ��һ�����ʽ�������´�������ij�Ա��
Example #6 �����´�������ij�Ա
<?php
echo (new DateTime())->format('Y');
?>
�������̵���������ڣ�
2016
Class properties and methods live in separate "namespaces", so it is possible to have a property and a method with the same name. Referring to both a property and a method has the same notation, and whether a property will be accessed or a method will be called, solely depends on the context, i.e. whether the usage is a variable access or a function call.
Example #7 Property access vs. method call
<?php
class Foo
{
public $bar = 'property';
public function bar() {
return 'method';
}
}
$obj = new Foo();
echo $obj->bar, PHP_EOL, $obj->bar(), PHP_EOL;
�������̻������
property method
That means that calling an anonymous function which has been assigned to a property is not directly possible. Instead the property has to be assigned to a variable first, for instance. As of PHP 7.0.0 it is possible to call such a property directly by enclosing it in parentheses.
Example #8 Calling an anonymous function stored in a property
<?php
class Foo
{
public $bar;
public function __construct() {
$this->bar = function() {
return 42;
};
}
}
$obj = new Foo();
// as of PHP 5.3.0:
$func = $obj->bar;
echo $func(), PHP_EOL;
// alternatively, as of PHP 7.0.0:
echo ($obj->bar)(), PHP_EOL;
�������̻������
42
һ����������������� extends �ؼ��ּ̳���һ����ķ��������ԡ�PHP��֧�ֶ��ؼ̳У�һ����ֻ�ܼ̳�һ�����ࡣ
���̳еķ��������Կ���ͨ����ͬ���������������������ǡ�����������ඨ�巽��ʱʹ���� final����÷������ɱ����ǡ�����ͨ�� parent:: �����ʱ����ǵķ��������ԡ�
�����Ƿ���ʱ���������뱣��һ�·��� PHP ������ E_STRICT
����Ĵ�����Ϣ�������캯�����⣬���캯�����ڱ�����ʱʹ�ò�ͬ�IJ�����
Example #9 ����̳�
<?php
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>
�������̻������
Extending class a default value
�� PHP 5.5 �𣬹ؼ��� class Ҳ�����������Ľ�����ʹ�� ClassName::class ����Ի�ȡһ���ַ������������� ClassName ����ȫ�����ơ����ʹ���� �����ռ� �����������á�
Example #10 �����Ľ���
<?php
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>
�������̻������
NS\ClassName
Note:
The class name resolution using ::class is a compile time transformation. That means at the time the class name string is created no autoloading has happened yet. As a consequence, class names are expanded even if the class does not exist. No error is issued in that case.