/* 看板娘 */ /* 粒子吸附*/

php面向对象常用概念

类:对于某类事物的以种抽象,他包含事物的形态、行为

对象:是类的实例化,人类(亚洲人对象) 狗类(金毛)

成员变量:对象的属性特征

成员函数:对象的某种行为

构造函数:主要用来创建对象时,初始化对象,为对象的成员变量赋初始值,意味着在new对象时用到该函数,该函数需要定义在类中

 

    格式:__(两个下划线)construct(参数)

测试代码:

 

<?php

 

/**

 

 *

 

 */

 

class site

 

{

 

var $name;

 

var $age;

 

function __construct($parameter1,$parameter2)//构造函数

 

{

 

$this->name=$parameter1;

 

$this->age=$parameter2;

 

}

 

function setName($para)

 

{

 

$this->name=$para;

 

}

 

function printName()

 

{

 

echo $this->name;

 

}

 

function setAge($para)

 

{

 

$this->age=$para;

 

}

 

function printAge()

 

{

 

echo $this->age;

 

}

 

}

 

$st1=new site("shayan","cycycd");

 

$st1->printName();

 

$st1->printAge();

 

$st2=new site("tom","bob");

 

$st2->setName("peter");

 

$st2->printName();

 

?>

 

 

析构函数:和构造函数相反,当对象使用玩之后,会自动执行析构函数把对象销毁

格式:__destruct(){}

测试代码:

<?php

/**

 *

 */

 

class myclass{

function __construct()

{

print "构造函数\n";

echo "此处调用__construct\n";

$this->name="myclass";

}

function __destruct(){

echo "析构函数\n";

echo "此处调用__destruct\n";

print "销毁".$this->name."\n";

}

}

$obj=new myclass;

echo $obj->name."\n";

?>

 

 

析构函数在整段代码执行完成后才会调用,

类的定义:

Class classname{定义类的变量和函数}

继承:在php中可以使用extends继承一个列,不能继承多个(使用其他类中的变量和函数,这个类也叫做父类)

A{}

Class B extends A{},AB的父类,BA的子类,B可以使用A中的变量和函数

 

<?php

/**

 *

 */

class site

{

var $name;

var $age;

function __construct($parameter1,$parameter2)//构造函数

{

$this->name=$parameter1;

$this->age=$parameter2;

}

function setName($para)

{

$this->name=$para;

}

function printName()

{

echo $this->name;

}

function setAge($para)

{

$this->age=$para;

}

function printAge()

{

echo $this->age;

}

}

class child_site extends site

{

var $grade;

function setGra($para){

$this->grade=$para;

}

function getGar()

{

echo $this->grade;

}

}

$csite=new child_site("父类是site\n","我是子类\n");

$csite->printName();

$csite->printAge();

$csite->setGra("我是子类方法\n");

$csite->getGar();

?>

 

 

 

方法重写:覆盖,也就是说父类中方法不能满足自身的需要,重新去定义方法

访问控制:对定义的类中属性和方法进行访问控制,通过public/protected/private实现

Public:公有的

Protected

Private

创建父类和子类

class myclass

{

var $public ='public';//var默认public

protected $protected ='protected';

private  $private='private';

function printh()

{

echo $this->public."\n";

echo $this->protected."\n";

echo $this->private."\n";

}

}

class myclass2 extends myclass

{//可以对publicprotected进行重定义,但private不行

protected $protected='protected2';

function printh()

{

echo $this->public."\n";

echo $this->protected."\n";

echo $this->private."\n";

}

}

 测试用子类访问父类protected

 

 

 

报错

 

 

 

测试用子类访问private

 

 

 

 

报错

 

测试子类重写父类方法后调用父类属性

 

无法对private进行重定义,会报错undefined

 

 

 

 

 对父类方法和成员变量的重写测试

测试代码:

<?php

class MyClass

{

    // 声明一个公有的构造函数

    public function __construct() { }

     // 声明一个公有的方法

    public function MyPublic() { echo "public's function"."\n";}

     // 声明一个受保护的方法

    protected function MyProtected() { echo "protected's function"."\n"; }

     // 声明一个私有的方法

    private function MyPrivate() {echo "private's function"."\n"; }

     // 此方法为公有

    public function Foo()

    {

        $this->MyPublic();

        $this->MyProtected();

        $this->MyPrivate();

    }

}

 $myclass = new MyClass;

$myclass->MyPublic(); // 这行能被正常执行

//$myclass->MyProtected(); // 这行会产生一个致命错误

//$myclass->MyPrivate(); // 这行会产生一个致命错误

$myclass->Foo(); // 公有,受保护,私有都可以执行

 

 

 /**

 * Define MyClass2

 */

class MyClass2 extends MyClass

{

    // 此方法为公有

    function Foo2()

    {

        $this->MyPublic();//没问题

        $this->MyProtected();//没问题

        //$this->MyPrivate(); // 这行会产生一个致命错误

    }

}

 $myclass2 = new MyClass2;

$myclass2->MyPublic(); // 这行能被正常执行

$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

 class Bar

{

    public function test() {

        $this->testPrivate();

        $this->testPublic();

    }

     public function testPublic() {

        echo "Bar::testPublic\n";

    }

    

    private function testPrivate() {

        echo "Bar::testPrivate\n";

    }

}

 class Foo extends Bar

{

    public function testPublic() {

        echo "Foo::testPublic\n";

    }

    

    private function testPrivate() {

        echo "Foo::testPrivate\n";

    }

}

 $myFoo = new foo();

$myFoo->test(); // Bar::testPrivate

                // Foo::testPublic

?>

 

 

posted @ 2019-10-09 23:07  砂岩boy  阅读(224)  评论(0编辑  收藏  举报