```php
<?php
//再php中定义一个类
//语法:
//修饰符 class 类名 {类体} 修饰符可以为 final abstract
//定义一个Persion类
class Persion
{
//在类中直接被声明的常量被称为成员常量,成员常量是一个不会被改变的常量
const SCIENTIFIC_NAME = "Home sapiens"; //常量学名 该属性值不会改变
//在类中直接被声明的变量被称为成员变量,又被称为成员属性,定义成员变量需要使用修饰符来修饰 如果不需要特别的含义则使用var来修饰
var $sex; //性别
var $age;
var $money;
var $married;
function income ($money){
//这是一个函数它在类中被直接声明了 ;它在类中被直接声明又称为成员方法 , 成员方法和函数是不同的成员方法通常用来实现类的一个行为
//必须和类结合使用只能通过该类及其下标来调用如果要在成员方法里面访问成员属性或其他的方法则要使用为变量$this,$this表示当前对象或对象
//本身
$this -> money += $money;
//和java中的this.name = name;
}
}
?>
<?php
//和java中的一样在定义一个类后可以使用new运算符来获取一个实例化对象
//然后使用->来访问对象的成员属性和成员方法 使用::来访问对象的成员常量和成员常量
// include 'Persion.class.php';
$jack = new Persion ();
$jack -> income(10000);
echo "<p>jack的存款有:".$jack ->money;
// echo "<p>".SCIENTIFIC_NAME;
// echo "<p>". $jack::SCIENTIFIC_NAME_NAME;
?>
=========================================================
<?php
//构造函数是一种特殊的方法主要用来创建对象时初始化对象即为成员变量赋初始值在创建对象的语句中与new函数一起使用
//php允许开发者在一个类类中定义一个构造方法作为构造函数
//定义构造方法的关键字是 construct
//void_construct([mixed args [,.....]])//和java一样构造方法名和类名相同
//首先就是定义一个类
class Student
{
//类体
var $gender;
var $age; //成员变量
var $name;
//定义构造方法
function __construct($gender,$age,$name){
$this -> gender = $gender;
$this -> age = $age;
$this -> name = $name;
}
// //构造方法的写法二
// function Persion($gender,$age,$age){
// $this -> gender = $gender;
// $this -> age = $age;
// $this -> name = $name;
// /*
// * Fatal error: Redefinition of parameter $age in F:\xampp\htdocs\php\hanshu\day02.php on line 21
// * 在这里它报了一个错就是age重复定义了
// * */
// }
/*
* object(Student)#1 (3) {
["gender"]=>
string(3) "man"
["age"]=>
int(18)
["name"]=>
string(8) "huangtao"
}
* 这是代码的输出结果
* */
}
?>
<?php
//另外在其他的地方还可以引用并通过构造方法来创建对象同时初始化其中的属性
$huangtao = new Student ("man",18,"huangtao");
echo "<pre>";//<pre>就是让输出的格式好看一点的东西
var_dump($huangtao);
?>
================================<?php
//在php中的析构函数
/*
* 析构函数和构造函数相反当对象结束它的生命周期如:所在地区的对象已经运行完毕了系统会自动的执行析构函数
* 析构函数往往用来执行清理善后工作如:内存的清理 和 释放
*
* 定义构造函数的语法格式:
* void __destruct ();
* */
//例子:
class Persion{
var $id ;
var $name;
var $gender;
var $age;
var $salary;
var $address;
function Persion( $name ,$gender, $age , $salary , $address){
this ->id = $id;
this ->name = $name;
this -> gender = $gender;
this ->age = $age;
this ->salary = $salary;
this -> address = $address;
}
//使用析构函数清理内存
function __destruct(){
echo "运行结束,清理内存";
}
}
?>
<?php
$huangtao = new Persion(1,"huangtao","man",18,10000,"广东");
echo "<br>";
var_dump($huangtao);
?>
========================================================
<?php
//析构函数2:
//先创建一个类
class Study {
var $max;
var $scient;
}
//创建析构函数释放内存
function __destruct(){
echo "运行结束,释放内存";
}
?>
<?php
//如果要在如果要在其他的地方调用则组函数执行完毕会执行Persion的析构函数
$jack = new Study();
?>
========================================================
<?php
//$this是一个伪变量由于在php中通常是先声明一个类 , 然后再将其实例化为一个对象,但是在声明类时一般无法得知对象的名称
//因此要在类的内部使用属性和方法则可以使用¥来表示实例化后的具体对象
//在php中也有面向对象
//面向对象的三大特性: 封装 , 继承 , 和多态
//我们来了解各大关键字:
/*
* public 关键字修饰的属性和方法都是公开的,可以在程序的任何的地方被调用子类可以继承父类的所有公共成员
* private 关键字 和public相反你修饰的属性和方法都是私有的正只能在其所属的类的内部进行调用
* protect关键字修饰的属性和方法除了子类外其他的类都不可以调用
* 面向对象的继承性就是 extends 就是继承的关键字和java一样都有继承性
*
* 接下来我们来深入了解各大关键字
* */
//定义一个类
class Persion{
//类体
public $name;//定义了一个公共的类你是name就是name
private $id;
//在类的内部定义一个构造函数
function __construct(){
$this -> name = "jack";//相当于是给他赋予了一个值在此处使用到了伪函数
//该函数指向的是对象自己
}
}
?>
<?php
//在其他的地方构建函数对象并对其进行访问
$jack = new Persion();
echo "<br>";
echo $jack -> name;
// echo $jack -> id;
/*
* -----> Fatal error: Uncaught Error: Cannot access private property Persion::$id in
* F:\xampp\htdocs\php\hanshu\day05.php:38 Stack trace: #0 {main} thrown
* in F:\xampp\htdocs\php\hanshu\day05.php on line 38
* 我们可以看到报了该错误就是指该id变量是私有的不可以访问
* */
?>
=========================================================
<?php
//在php中我们的protect关键字
//创建类
class Persion {
public $name;
private $id;
protected $salary;
//创建构造函数
// function __Persion($name , $id , $salary){
this -> name = $name;
// this -> id = $id ;
// this -> salary = $salary;
//
// }
//创建构造函数
function __construct(){
$this -> name = "huangtao";
$this -> id = 123;
$this ->salary = 10000;
}
}
?>
<?php
//接下来在其他的地方实例化并调用函数
$huangtao = new Persion();
echo "<br>";
echo $huangtao -> name;
$id = new Persion();
echo "<br>";
echo $id -> id;
echo "<br>";
$salary = new Persion();
echo $salary->salary;
/*
* Fatal error: Uncaught Error: Cannot access private property Persion::$id in
* F:\xampp\htdocs\php\hanshu\day06.php:31 Stack trace: #0 {main} thrown in
* F:\xampp\htdocs\php\hanshu\day06.php on line 31
* */
//我们可以看到它报了以上的错误
?>
=========================================================
<?php
//在php中的protected关键字修饰的属性和方法除了他的子类可以调用外其他的类都不可以调用
class Persion{
public $name;
protected $money;
function __construct(){
$this ->name = "Jack";
$this ->money = 10000;
}
}
class Man extends Persion {
//这里定义的是一个函数但是它是在前面加了修饰的函数就是加了一个公共的修饰 public
public function numOfMoney(){
return $this -> money;
}
}
$Jack = new Man();
echo $Jack ->numOfMoney();
$Jack = new Persion();
echo $Jack->money;
/*
* 10000
Fatal error: Uncaught Error: Cannot access protected property Persion::$money in
* F:\xampp\htdocs\php\hanshu\day07.php:20 Stack trace: #0 {main} thrown in
* F:\xampp\htdocs\php\hanshu\day07.php on line 20
* 我们可以看到它的返回值只有一个就是1000也就是说它修饰的方法只有他的子类能调用
* */
?>
=========================================================
<?php
//面向对象之继承性使用到的关键字是extends
//创建一个类
class Persion{
public $name;
public $gender;
public $birthday;
const MAN = 0;
const WOMAN = 1;
function __construct($name,$birthday){
$this->name = $name;
$this ->birthday = $birthday;
}
}
//再创建一个Persion的子类来继承他
class Man extends Persion{
function __construct($name,$birthday){
parent:: __construct ($name,$birthday);
$this ->gender = $this::MAN;
}
}
class Woman extends Persion{
function __construct($name,$birthday){
parent:: __construct ($name,$birthday);
$this ->gender = $this::WOMAN;
}
}
$jack = new Man ("jack","19910101");
$jack = new Woman ("Lucy","19980501");
echo "<pre>";
var_dump($jack);
var_dump($Lucy);
?>