kuangweijian
3 years ago
16 changed files with 438 additions and 20 deletions
-
2007面向对象/01.php
-
9607面向对象/01继承.php
-
607面向对象/02命名空间/01显示当前的命名空间.php
-
1807面向对象/02命名空间/02使用命名空间/file1.php
-
3307面向对象/02命名空间/02使用命名空间/file2.php
-
5407面向对象/02命名空间/03use的使用/demo.php
-
1807面向对象/02命名空间/03use的使用/file.php
-
5907面向对象/03工场模式--创建对象的类.php
-
307面向对象/04单例模式.php
-
1407面向对象/05魔术方法/__get.php
-
1407面向对象/05魔术方法/set.php
-
2207面向对象/06抽象类.php
-
3907面向对象/07接口.php
-
3007面向对象/08最终类final.php
-
1507面向对象/09克隆clone.php
-
1707面向对象/10判断对象是否属于某个类.php
@ -1,20 +0,0 @@ |
|||||
<?php |
|
||||
class students |
|
||||
{ |
|
||||
var $name; |
|
||||
public $age; |
|
||||
private $sex; |
|
||||
public static $school; |
|
||||
public function Write(string $a, int $b):bool{ |
|
||||
|
|
||||
} |
|
||||
|
|
||||
protected static function Read(string $str):int { |
|
||||
|
|
||||
} |
|
||||
|
|
||||
function Listen(int $num):bool{ |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
?>
|
|
@ -0,0 +1,96 @@ |
|||||
|
<?php |
||||
|
|
||||
|
//继承父类中的publc成员demo
|
||||
|
class classParent |
||||
|
{ |
||||
|
public function __construct() |
||||
|
{ |
||||
|
echo '--进入父类--'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
public function demo() //public 成员
|
||||
|
{ |
||||
|
echo '--父类 方法--'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
public function __destruct() |
||||
|
{ |
||||
|
echo '--推出父类--'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class son extends classParent |
||||
|
{ |
||||
|
public function __construct() |
||||
|
{ |
||||
|
echo '--进入子类--'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
public function __destruct() |
||||
|
{ |
||||
|
echo '--退出子类--'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// $obj = new son();
|
||||
|
// $obj -> demo();
|
||||
|
|
||||
|
|
||||
|
/*继承父类中的保存成员*/ |
||||
|
|
||||
|
class parent2 |
||||
|
{ |
||||
|
public function __construct() |
||||
|
{ |
||||
|
echo '--进入父类--'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
protected function demo() |
||||
|
{ |
||||
|
echo '父类保护成员'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
public function __destruct() |
||||
|
{ |
||||
|
echo '--退出父类--'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class son2 extends parent2{ |
||||
|
public function __construct() |
||||
|
{ |
||||
|
echo '--进入子类--'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
public function test() |
||||
|
{ |
||||
|
echo '子类公共成员'.'<br>'; |
||||
|
$this -> demo(); //这个this是指子son2;
|
||||
|
} |
||||
|
|
||||
|
public function __destruct() |
||||
|
{ |
||||
|
echo '--退出子类--'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// $obj = new son2();
|
||||
|
// $obj -> test();
|
||||
|
|
||||
|
/*继承父类中的私有成员*/ |
||||
|
class parent3{ |
||||
|
private function func(){ |
||||
|
echo '父类私有成员'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class son3 extends parent3{ |
||||
|
public function test(){ |
||||
|
$this -> func(); //会报错
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$obj=new son3(); |
||||
|
$obj -> test(); |
||||
|
?>
|
@ -0,0 +1,6 @@ |
|||||
|
<?php |
||||
|
namespace foo\bar\demo; |
||||
|
|
||||
|
echo '命名空间为'.__NAMESPACE__; |
||||
|
|
||||
|
?>
|
@ -0,0 +1,18 @@ |
|||||
|
<?php |
||||
|
namespace Foo\Bar\subnamespace; |
||||
|
|
||||
|
const FOO = 1; |
||||
|
|
||||
|
function foo() { |
||||
|
echo '命名空间:'.__NAMESPACE__.'--函数:foo'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
class foo |
||||
|
{ |
||||
|
// public function demo() {
|
||||
|
//如果使用public,会报错Fatal error: Uncaught Error: Non-static method Foo\Bar\subnamespace\foo::demo() cannot be called statically in
|
||||
|
static function demo() { |
||||
|
echo '命名空间为:'.__NAMESPACE__.'--类foo的方法demo'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
?>
|
@ -0,0 +1,33 @@ |
|||||
|
<?php |
||||
|
namespace Foo\Bar; |
||||
|
include 'file1.php'; |
||||
|
|
||||
|
const FOO = 2; |
||||
|
|
||||
|
function foo() { |
||||
|
echo '命名空间:'.__NAMESPACE__.'--函数:foo'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
class foo |
||||
|
{ |
||||
|
static function demo() { |
||||
|
echo '命名空间为:'.__NAMESPACE__.'--类foo的方法demo'.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 非限定名称 */ |
||||
|
foo(); // 解析为函数 Foo\Bar\foo
|
||||
|
foo::demo(); // 解析为类 Foo\Bar\foo 的静态方法 staticmethod
|
||||
|
echo '命名空间为:'.__NAMESPACE__.'--常量FOO:'.FOO.'<br>'; // 解析为常量 Foo\Bar\FOO
|
||||
|
|
||||
|
/* 限定名称 */ |
||||
|
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
|
||||
|
subnamespace\foo::demo(); // 解析为类 Foo\Bar\subnamespace\foo,
|
||||
|
// 以及类的方法 staticmethod
|
||||
|
echo '命名空间为:'.__NAMESPACE__.'--常量FOO:'.subnamespace\FOO.'<br>'; // 解析为常量 Foo\Bar\subnamespace\FOO
|
||||
|
|
||||
|
/* 完全限定名称 */ |
||||
|
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
|
||||
|
\Foo\Bar\foo::demo(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
|
||||
|
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
|
||||
|
?>
|
@ -0,0 +1,54 @@ |
|||||
|
<?php |
||||
|
//命名空间a
|
||||
|
namespace a |
||||
|
{ |
||||
|
const const_a=1; //常量a
|
||||
|
|
||||
|
function func_a() |
||||
|
{ |
||||
|
echo __FUNCTION__.'<br>'; |
||||
|
} |
||||
|
|
||||
|
class cls_a |
||||
|
{ |
||||
|
static function func() |
||||
|
{ |
||||
|
echo __CLASS__.'--'.__FUNCTION__.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//命名空间b
|
||||
|
namespace b |
||||
|
{ |
||||
|
//导入类
|
||||
|
use a\cls_a as cls_b; //导入命名空间a\b\c的类cls_a,设置别名cls_a
|
||||
|
|
||||
|
$obj=new cls_b; |
||||
|
$obj -> func(); |
||||
|
|
||||
|
//导入函数
|
||||
|
use function a\func_a; |
||||
|
func_a(); |
||||
|
|
||||
|
//导入常量
|
||||
|
use const a\const_a; |
||||
|
echo const_a.'<br>'; |
||||
|
} |
||||
|
|
||||
|
namespace c |
||||
|
{ |
||||
|
//导入命名空间
|
||||
|
use a as aa; |
||||
|
|
||||
|
echo aa\const_a.'<br>';; |
||||
|
|
||||
|
aa\func_a(); |
||||
|
|
||||
|
$obj=new aa\cls_a(); |
||||
|
$obj -> func(); |
||||
|
} |
||||
|
|
||||
|
//感悟:命名空间就像在一个文件中把其中一筐代码框住,放在一个空间中,当要使用是就用use导入
|
||||
|
//注意:导入不同文件的命名空间需要用iclude'file'
|
||||
|
?>
|
@ -0,0 +1,18 @@ |
|||||
|
<?php |
||||
|
namespace a; |
||||
|
|
||||
|
const const_a=1; //常量a
|
||||
|
|
||||
|
function func_a() |
||||
|
{ |
||||
|
echo __FUNCTION__,"\n"; |
||||
|
} |
||||
|
|
||||
|
class cls_a |
||||
|
{ |
||||
|
static function func() |
||||
|
{ |
||||
|
echo __CLASS__.'-'.__FUNCTION__.'\n'; |
||||
|
} |
||||
|
} |
||||
|
?>
|
@ -0,0 +1,59 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use a\cls_a; |
||||
|
|
||||
|
class add{ |
||||
|
public function getVal($n,$m){ |
||||
|
return $n + $m; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class sub |
||||
|
{ |
||||
|
public function getVal($n,$m) |
||||
|
{ |
||||
|
return $n-$m; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class mul |
||||
|
{ |
||||
|
public function getVal($n,$m) |
||||
|
{ |
||||
|
return $n * $m; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class div |
||||
|
{ |
||||
|
public function getVal($n,$m) |
||||
|
{ |
||||
|
return $n / $m; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//工程类:用来创建对象
|
||||
|
class mathOpt{ |
||||
|
public static function createObj($opt){ |
||||
|
switch ($opt) |
||||
|
{ |
||||
|
case '+': |
||||
|
return new add(); |
||||
|
break; |
||||
|
case '-': |
||||
|
return new sub(); |
||||
|
break; |
||||
|
case '*': |
||||
|
return new mul(); |
||||
|
break; |
||||
|
case '/': |
||||
|
return new div(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$obj = mathOpt::createObj('*'); |
||||
|
$ret=$obj -> getVal(5,7); |
||||
|
echo $ret; |
||||
|
?>
|
@ -0,0 +1,3 @@ |
|||||
|
<?php |
||||
|
|
||||
|
?>
|
@ -0,0 +1,14 @@ |
|||||
|
<?php |
||||
|
class clsA{ |
||||
|
public $a = 'hello'; |
||||
|
private $b; |
||||
|
public function __get($name) |
||||
|
{ |
||||
|
echo "获取{$name}失败,{$name}未定义".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$obj = new clsA(); |
||||
|
$obj -> a = 'world'; |
||||
|
echo $obj -> b; //b未定义,当b被调用时,自动调用了__get,自动传入key
|
||||
|
?>
|
@ -0,0 +1,14 @@ |
|||||
|
<?php |
||||
|
class clsA{ |
||||
|
public $a = 'hello'; |
||||
|
private $b; |
||||
|
public function __set($key,$val) |
||||
|
{ |
||||
|
echo "{$key}未定义, val:{$val}".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$obj = new clsA(); |
||||
|
$obj -> a = 'world'; |
||||
|
$obj -> b = 'test'; //b未定义,但b被赋值时,自动调用了__set,自动传入b和test
|
||||
|
?>
|
@ -0,0 +1,22 @@ |
|||||
|
<?php |
||||
|
//这是一个抽象类
|
||||
|
abstract class animal |
||||
|
{ |
||||
|
public $eyes = 2; |
||||
|
public $foots = 4; |
||||
|
abstract public function eat(); //抽象方法
|
||||
|
} |
||||
|
|
||||
|
class dog extends animal //继承抽象类
|
||||
|
{ |
||||
|
public function eat() //子类必须实现抽象类中的抽象方法
|
||||
|
{ |
||||
|
echo "狗吃骨头".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$adog = new dog(); |
||||
|
$adog -> eat(); |
||||
|
|
||||
|
//注意:抽象类不能被实例化,已经要被子类继承
|
||||
|
?>
|
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
/* |
||||
|
* 接口是一种特殊的抽象类,所以接口时一种类 |
||||
|
* 一个子类可以同时继承多个接口 |
||||
|
* 接口里不能有变量,只有常量和抽象类 |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
//定义一个接口
|
||||
|
interface animal |
||||
|
{ |
||||
|
const eyes = 2; |
||||
|
const foots = 4; |
||||
|
function eat(); //抽象方法
|
||||
|
} |
||||
|
|
||||
|
interface pet |
||||
|
{ |
||||
|
const name = 'lucky'; |
||||
|
function run(); //抽象方法
|
||||
|
} |
||||
|
|
||||
|
class dog implements animal, pet //继承多个接口animal和pet
|
||||
|
{ |
||||
|
function eat() |
||||
|
{ |
||||
|
echo "狗吃骨头".'<br>'; |
||||
|
} |
||||
|
|
||||
|
function run() |
||||
|
{ |
||||
|
echo "狗跑去操场".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$adog = new dog(); |
||||
|
$adog -> eat(); |
||||
|
$adog -> run(); |
||||
|
?>
|
@ -0,0 +1,30 @@ |
|||||
|
<?php |
||||
|
|
||||
|
//使用 final 修饰的类,不能被继承;
|
||||
|
final class plant |
||||
|
{ |
||||
|
public $tall; |
||||
|
} |
||||
|
|
||||
|
class tree extends plant //应该会报错 Class tree may not inherit from final class (plant)
|
||||
|
{ |
||||
|
public $color; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//类中使用 final 修饰的成员方法,在子类中不能覆盖(重写)该方法。
|
||||
|
class animal |
||||
|
{ |
||||
|
final public function eat(){ |
||||
|
echo "animal eat".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class dog extends animal |
||||
|
{ |
||||
|
public function eat() //应该会报错 Cannot override final method animal::eat()
|
||||
|
{ |
||||
|
echo "dog eat bone".'<br>'; |
||||
|
} |
||||
|
} |
||||
|
?>
|
@ -0,0 +1,15 @@ |
|||||
|
<?php |
||||
|
class dog{ |
||||
|
public $color = 'yellow'; |
||||
|
public function show() |
||||
|
{ |
||||
|
echo "color=".$this->color.'<br>'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$adog = new dog(); |
||||
|
$anthorDog = clone $adog; |
||||
|
|
||||
|
$adog->show(); |
||||
|
$anthorDog->show(); |
||||
|
?>
|
@ -0,0 +1,17 @@ |
|||||
|
<?php |
||||
|
class A {} |
||||
|
class B {} |
||||
|
|
||||
|
$obj = new A; |
||||
|
|
||||
|
$ret=$obj instanceof B; |
||||
|
echo $ret.'<br>'; |
||||
|
if($obj instanceof B){ |
||||
|
echo 'true'.'<br>'; |
||||
|
}else{ |
||||
|
echo 'false'.'<br>'; |
||||
|
} |
||||
|
|
||||
|
$ret=$obj instanceof A; |
||||
|
echo $ret.'<br>'; |
||||
|
?>
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue