php中函数和对象的区别,PHP 基础之 PHP 函数与对象

本章主要介绍 PHP 的函数与对象的一些应用:

// PHP 函数与对象

print("test"); // 或 print "test";

echo(abs(5-8)); // 或 echo abs(5-8);

// 输出 test3

echo "
";

echo strrev(" .dlrow olleH"); // 将字符串次序颠倒

echo str_repeat("Hip ",2); // 重复字符串

echo strtoupper("hooray! "); // 将字符串转为大写

echo strtolower("HoOrAy! "); // 将字符串转为小写

echo ucfirst("hoOrAy!"); // 只将第一个字符大写

// 输出 Hello world. Hip Hip HOORAY! hooray! HoOrAy!

echo "
";

// 整理姓名

function fix_name1($n1, $n2, $n3)

{

$n1 = ucfirst(strtolower($n1));

$n2 = ucfirst(strtolower($n2));

$n3 = ucfirst(strtolower($n3));

return array($n1, $n2, $n3); // 以数组的形式返回

}

print_r(fix_name1("WILLIAM", "henry", "gatES")); // 输出 Array ( [0] => William [1] => Henry [2] => Gates )

echo "
";

$a1 = "WILLIAM";

$a2 = "henry";

$a3 = "gatES";

function fix_name2() // PHP 不允许重名

{

global $a1, $a2, $a3; // 不加这句会报变量未定义的错误

$a1 = ucfirst(strtolower($a1));

$a2 = ucfirst(strtolower($a2));

$a3 = ucfirst(strtolower($a3));

}

fix_name2();

echo $a1." ".$a2." ".$a3; // 输出 William Henry Gates

echo "
";

// global $str = "abc"; 错误:全局变量声明的时候不能初始化

$came_from = htmlentities($_SERVER['SERVER_NAME']); // htmlentities 函数会将所有字符转化为 HTML 实体,如:< 被转化为 <

$came_from .= htmlentities($_SERVER['PHP_SELF']);

echo $came_from; // 输出 www.bxg.com/练习.php

// 如果使用include,则include包含的文件中如果继续调用include,会报错。

// include, include_once 只会试图导入被请求的文件,即便文件没有找到也会继续执行。

// 不使用 require 和 不使用 include 的道理是一样的。

// 所以应该使用 require_once 导入文件。

echo "
";

var_dump(function_exists("fix_name2")); // 检查函数是否存在,包括自定义的函数。函数存在,输出 bool(true)

var_dump(function_exists("fix_name3")); // 函数不存在,输出 bool(false)

echo phpversion(); // 检测代码运行版本。输出 7.1.1

echo "
";

define("CONSTVAR1", 123); // 定义常量,区分大小写,常量要用""引起来

echo CONSTVAR1; // 访问常量不需要$,输出 123

define("CONSTVAR2", 456, true); // 定义常量,不区分大小写,常量要用""引起来

echo constVar2; // 输出 456

const CONSTVAR3 = 789; // 定义常量,区分大小写,常量不需要用""引起来

echo CONSTVAR3; // 输出 789

echo "
";

// 对象克隆

class User {

public $name, $password; // 变量必须要有关键字(public(或var), protected, private)声明,即单独写 $password是错误的; public 后面不加 :

// public $time = time(); 类中给变量赋初值时应该是常量,不能是函数或者表达式计算的结果 (注意, 赋值 2*7 可以,代表常量 14,但是赋值 $var * 7 就不可以了,即使 $var = 2)

function __construct($param1, $param2) { // 构造函数, 也可以使用类名 (User) 本身

$this -> name = $param1; // 不能使用 $name -> param1,必须要使用 $this

$this -> password = $param2;

}

function __destruct() { // 构造函数

// 再此添加析构函数的语句

}

function get_password() { // 用户自定义的函数不能以 __ 开头; 函数不用显式地用关键字声明,默认为 public

return $this -> password; // 访问属性或方法时,属性和函数的前面不加 $

// 不能使用 return $password

}

function test() { // 如果防止子类方法覆盖父类方法,应该在function前面使用final关键字

echo "I'm your father.";

}

}

/*

$obj1 = new User; // 构造函数没有参数的时候,或者使用 $obj1 = new User();

$obj1 -> name = "Ma"; // 访问属性或方法时,属性和函数的前面不加 $

$obj2 = $obj1; // 这样做会使 $obj1 和 $obj2 指向同一个对象

$obj2 -> name = "Hao";

echo $obj1->name . " " . $obj2->name; // 输出 Hao Hao

echo "
";

$obj1 -> name = "Ma";

$obj2 = clone $obj1; // 使用 clone 操作符 可以创建一个新实例,同时将 obj1 的值赋给 obj2

$obj2 -> name = "Hao";

echo $obj1->name . " " . $obj2->name; // 输出 Ma Hao

echo "
";

*/

$obj3 = new User("Bing", 123); // 带参数的构造函数

$obj3 -> age = 12 + 13; // 可以在初次使用该属性的同时定义, 此时类中相当于有 $age = 25; 而且,这个变量可以被赋值为 常量、变量或表达式、函数等; 默认为 public

print_r($obj3); // 输出 User Object ( [name] => Bing [password] => 123 [age] => 25 )

echo $obj3 -> get_password(); // 输出 123

echo "
";

// 声明常量

class Translate {

const ENGLIST = 2; // 定义常量的另外一种方法,一旦定义了一个常量,就不能改变它的值

var $name = "Ma"; // 跟 public 一样,老版本兼容,但不提倡

static $password = 2*4; // 静态属性, 只能赋常量值,不能将函数、表达式赋给 $password

static function lookup() { // 在类中定义的静态方法,需要用 类名本身来引用,而不是对象

echo self::ENGLIST; // 使用 self 关键字和 :: 操作符能够直接引用常量,区分大小写

// $this -> name = "hhh"; 静态方法不能访问任何对象属性或方法

echo self::$password; // 使用 self 关键字和 :: 操作符能够直接引用静态属性

}

}

Translate:: lookup(); // 用类名引用静态函数,以便不用实例化就可以访问; 使用 :: 而不是 -> ; 输出28

echo "
";

// 继承

class Subscriber extends User {

public $phone, $email;

function __construct($param) {

parent::__construct($this->name, $this->password); // 注意!首先调用父类的构造方法

$this->phone = $param;

}

function display() {

echo "Name: " . $this->name . "
";

echo "Password: " . $this->password . "
";

echo "Phone: " . $this->phone . "
";

echo "Email: " . $this->email . "
";

}

function test() {

echo "I'm your son.";

}

function test2() {

parent::test(); // parent 关键词调用的是父元素的同名函数

}

}

$objex = new Subscriber("1881099****");

$objex -> name = "ma**";

$objex -> password = "456";

$objex -> email = "82791***@qq.com";

$objex -> display(); // 输出所有属性

$objex -> test(); // 输出 I'm your son.

$objex -> test2(); // 输出 I'm your father.

?>

可以针对程序查看对应输出:

420c346e795f

result.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值