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.

?>

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

result.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,487评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 又梦见江湖,老是会有这样的梦境。又是几个人一起,又是有一个让人感觉很温暖的女子。大抵是现实中太孤独了罢。
    晓乌精舍呓语阅读 207评论 0 0
  • 2016的上半年送走了我的第一批小学毕业的孩子们,虽然最后的毕业典礼有些匆忙,可能还未来得及回味在一起的点点滴滴就...
    沁雪入心阅读 559评论 0 0
  • 人的一辈子一直在做选择,选择你喜欢的书,选择你喜欢的食物,选择你喜欢的衣物;选择你的朋友,选择你的伴侣,...
    潘多拉简书阅读 303评论 0 0