PHP 基础之 PHP 函数与对象

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

<?php

// PHP 函数与对象

print("test");    // 或 print "test";
echo(abs(5-8));  //  或 echo abs(5-8);
// 输出 test3

echo "<br>";

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 "<br>";

// 整理姓名
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 "<br>";

$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 "<br>";

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

$came_from = htmlentities($_SERVER['SERVER_NAME']);   // htmlentities 函数会将所有字符转化为 HTML 实体,如:< 被转化为 &lt;
$came_from .= htmlentities($_SERVER['PHP_SELF']);
echo $came_from;  // 输出 www.bxg.com/练习.php

// 如果使用include,则include包含的文件中如果继续调用include,会报错。
// include, include_once 只会试图导入被请求的文件,即便文件没有找到也会继续执行。
// 不使用 require 和 不使用 include 的道理是一样的。
// 所以应该使用 require_once 导入文件。

echo "<br>";

var_dump(function_exists("fix_name2"));  // 检查函数是否存在,包括自定义的函数。函数存在,输出 bool(true)
var_dump(function_exists("fix_name3"));  // 函数不存在,输出 bool(false)
echo phpversion();  // 检测代码运行版本。输出 7.1.1

echo "<br>";

define("CONSTVAR1", 123);  // 定义常量,区分大小写,常量要用""引起来
echo CONSTVAR1;  // 访问常量不需要$,输出 123
define("CONSTVAR2", 456, true);  // 定义常量,不区分大小写,常量要用""引起来
echo constVar2;  // 输出 456
const CONSTVAR3 = 789;  // 定义常量,区分大小写,常量不需要用""引起来
echo CONSTVAR3;  // 输出 789

echo "<br>";

// 对象克隆
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 "<br>";

$obj1 -> name = "Ma"; 
$obj2 = clone $obj1;  // 使用 clone 操作符 可以创建一个新实例,同时将 obj1 的值赋给 obj2
$obj2 -> name = "Hao";
echo $obj1->name . " " . $obj2->name;  // 输出 Ma Hao

echo "<br>";

*/


$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 "<br>";

// 声明常量
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 "<br>";

// 继承
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 . "<br>";
       echo "Password: " . $this->password . "<br>";
       echo "Phone: " . $this->phone . "<br>";
       echo "Email: " . $this->email . "<br>";
   }
   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.

?>

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

《PHP 基础之 PHP 函数与对象》 result.png

    原文作者:牛奶芝麻
    原文地址: https://www.jianshu.com/p/420c346e795f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞