批改状态:未批改
老师批语:
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
header("content-type=text/html;charset=utf-8");
/**
* 对象的声明与实例化
* 类的声明class
* 对象实例化new
* 对象的访问->
*/
//创建一个类,利用class来声明一个类
class hello {
}
//使用new来实例化一个类,并将其附给变量$hello
$hello = new hello();
//给对象增加一些属性和方法
$hello->name = '杨过';
$hello->age = 30;
$hello->hello1 = function () {
return '我是一个方法';
};
//访问对象的属性或方法
echo $hello->name;
echo $hello->age;
echo call_user_func($hello->hello1);//因为hello1是一个函数了,所以要使用回调来处理一下就是call_user_func()来处理点击 "运行实例" 按钮查看在线实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
* 对象的三大特性:封装、继承、多态
* 封装就是将里面的数据进行私有化或者限制访问
* 封装用到的三种方法:public公共的共享,private私有的,protected限制访问的
* 为什么要封装呢?因为将封装起来的对象,使用公共的接口来访问,这样可以提供安全性。进行保护
* 类中成员,可以直接使用$this来访问成员,可直接访问
*/
//声明一个类
class demo2 {
//给对象两个公共属性
public $name = 'php中文网';
public $email = 'php@php.cn';
// 再给两个不是公共的属性
protected $sex = 1;//限制属性,公可以在本类或者子类中访问
protected $style;//限制的属性,仅可以在本类或者子类中可以访问
private $age;//私有属性,只可以在本类中访问
//声明类方法,创建公共接口
public function abc() {
return ($this->sex == 0) ? '男性' : '女性';//将受限制属性进行公共接口来访问
}
public function cbd() {
return ($this->sex ==0) ? $this->getsex() : '保密';//判断将私有属性也进行公共接口来访问
}
}
$demo2 = new demo2();
echo $demo2->name;
echo $demo2->email;
echo $demo2->abc();//因为公共接口是一个函数,所以要不能像前面直接访问属性哪种方法来访问。这个访问的是一个方法,不是一个属性。
echo $demo2->cbd();点击 "运行实例" 按钮查看在线实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
* 类常量、对象初始化、属性的重载
* 类常量,可以用来创建对象之间的共享数据
* 对象初始化,用构造方法来实现,让对象在完成一些工作的时候,进行初始化一些值或者属性
* 例如:对象初始化时,会自动调用对象的一些方法。对象初始化用__construct()
* 属性的重载:访问限制或者私有的属性或者不存在的属性,会触发这个属性重载
* 属性的重载有四种方法:__get(),__set(),__isset(),__unset(),这四种方法
*/
class demo3 {
//类常量,所有对象共享,用类名加范围解析符::来访问,且默认也是公共属性
//类常量,主要是用来创建类之间的共享数据
const SIZE_NAME = 'PHP中文网';
//声明三个私有属性
private $name;
private $email;
private $age;
//利用构造方法来初始化
public function __construct($name,$email,$age)
{
$this->name = $name;
$this->email = $email;
$this->age = $age;
}
public function show()
{
return '网站名称:'.$this->name.' 公共邮箱是:'.$this->email.' 今年已经:'.$this->age;
}
public function __get($name)
{
if ($name == 'age') {
return $name.'不允许查看';
}
return $this->$name;
}
public function __set($name, $value)
{
if ($name == 'email') {
return $name.'不允许修改';
}
$this->$name = $value;
}
public function __isset($name)
{
if ($name == 'age') {
return false;//因为是检测,所以这里要设置,true和false
}
return isset($this->$name);
}
public function __unset($name)
{
if ($name == 'name' || $name = 'email') {
return false;
}
unset ($this->$name);
}
}
//输出类常量利用::来输出
echo demo3::SIZE_NAME;
//输出构造方法
$demo3 = new demo3('php中文网','php@php.cn',30);
echo '<hr>';
//利用__get()来获取值
echo $demo3->age;
echo $demo3->name;
echo $demo3->email;
//echo $demo3->show();
//利用__set()来更新里面的值
$demo3->name = 'PHP';
echo $demo3->name;
$demo3->email = 'zl@php.cn';
echo $demo3->email;
//利用__isset()来做属性检测重载
echo isset($demo3->name) ? '末检查到' : '检查到';
echo isset($demo3->age) ? '末检查到' : '检查到';
//利用__unset来销毁一个属性
unset ($demo3->age);
echo $demo3->age;
//因为利用__unset设置了不能销毁,所以这个属性不能销毁,而上面的没有设置销毁,就可以将上面的属性销毁。
unset($demo3->name);
echo $demo3->name;点击 "运行实例" 按钮查看在线实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
* 对象的继承与多态
* 继承主要是让代码可以重复的使用,这样可以提供效率
*/
class demo4
{
//父类的属性
public $name;//声明一个公共的属性
protected $email;//声明一个受限制的属性
private $age;//声明一个私有属性
const ADMIN_NAME = 'PHP中文网';//声明一个类常量
//父类构造器
public function __construct($name,$email)
{
$this->name = $name;
$this->email =$email;
}
//属性的重载
public function __get($name)
{
if (isset($this->$name)) {
return $this->$name;
}
return '非法属性';
}
}
//利用extends来继承父类
class demo4_1 extends demo4
{
private $sex;
const ADMIN_NAME = '教学管理系统';
public function __construct($name, $email,$sex = '男')
{
$this->name = $name;
$this->email = $email;
//引用父类的构造方法,来简写代码
//利用parent::来引用父类里面的初始化方法
parent::__construct($name,$email);
$this->sex = $sex;
}
//因为工作中,最终要执行的方法,在子类里面做,所以父类的__get()是可以删除的,也不会影响代码的执行
//将父类里面的属性重载进行了重写,所以,可以顺利的读取到子类里面的东西
public function __get($name)
{
if (isset($this->$name)) {
return $this->$name;
}
return '非法属性';
}
}
$demo4_1 = new demo4_1('peter','peter@php.cn');
echo $demo4_1->name;
echo $demo4_1->email;
echo $demo4_1::ADMIN_NAME;//访问父类里面的类常量
echo $demo4_1->sex;//
echo $demo4_1->age;//因为age是私有属性,所以无法访问点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号