首頁 php教程 php手册 PHP 5.0对象模型深度探索之定义一个类

PHP 5.0对象模型深度探索之定义一个类

Jun 21, 2016 am 08:59 AM
name public user

  当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法。列表1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数。列表2中显示了如何在一个类中定义三个属性和两个方法。

  列表1

class Name extends Another Class
{
 Access Variable Declaration
 Access Function Declaration
}


  列表2

//定义一个跟踪用户的类
class User
{
 //属性
 public $name;
 private $password, $lastLogin;

 //方法
 public function __construct($name, $password)
 {
  $this->name = $name;
  $this->password = $password;
  $this->lastLogin = time();
  $this->accesses++;
 }

 // 获取最后访问的时间
 function getLastLogin()
 {
  return(date("M d Y", $this->lastLogin));
 }
}

//创建一个对象的实例
$user = new User("Leon", "sdf123");

//获取最后访问的时间
print($user->getLastLogin() ."
n");

//打印用户名
print("$user->name n");
?>


  当你声明属性,你不需要指明数据类型。变量可能是整型,字符串或者是另一个对象,这取决于实际情况。在声明属性时增加注释是一个好主意,标记上属性的含义和数据类型。

  当你声明一个方法,你所做的和在类外部定义一个函数是一样的。方法和属性都有各自的命名空间。这意味着你可以安全地建立一个与类外部函数同名的方法,两者不会冲突。例如,一个类中可以定义一个名为date()的方法。但是你不能将一个方法命名为PHP的关键字,如for或者while。

  类方法可能包含PHP中所谓的type hint. Type hint 是另一个传递参数给方法的类的名字. 如果你的脚本调用方法并传递一个不是类的实例的变量,PHP将产生一个”致命(fatal)错误” 。你可能没有给其它类型给出type hint,就像整型,字符串,或者布尔值. 在书写的时候, type hint是否应当包含数组类型仍存在争议。

  Type hint是测试函数参数或者运算符的实例的数据类型的捷径. 你可能总是返回这个方法. 确认你强制让一个参数必须是哪种数据类型,如整型. 列表3确保编译类只产生Widget的实例。

  列表3

//组件
class Widget
{
public $name='none';
public $created=FALSE;
}

//装配器
class Assembler
{
public function make(Widget $w)
{
print("Making $w->name
n");
$w->created=TRUE;
}
}

//建立一个组件对象
$thing = new Widget;
$thing->name = 'Gadget';

//装配组件
Assembler::make($thing);
?>


  除了传递参数的变量外,方法含有一个特殊的变量. 它代表类的个别实例. 你应当用这个来指向对象的属性和其它方法.一些面向对象的语言假设一个不合格的变量提交给本地属性,但在PHP中方法的任何变量只是在方法的一定范围内. 注意在User类的构造函数中这个变量的使用(3.1.2).

  PHP在属性和方法声明前定义一个访问限定语,如public,private和protected. 另外,你可以用”static”来标记一个成员. 你也可以在类中声明常量。以后稍后会有不同访问方式的相关讨论。

  你可以在一行中列出相同访问方式的几个属性,用逗号来分隔它们. 在3.1.2中,User类有两个private属性--$password和$lastLogin。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
iOS的developer版和public版有什麼不同? iOS的developer版和public版有什麼不同? Mar 01, 2024 pm 12:55 PM

每年Apple發布新的iOS和macOS大版本之前,用戶都可以提前幾個月下載測試版搶先體驗一番。由於大眾和開發人員都使用該軟體,蘋果公司為兩者推出了developer和public版即開發者測試版的公共測試版。 iOS的developer版和public版有什麼差別呢?從字面上的意思來說,developer版是開發者測試版,public版是公共測試版。 developer版和public版面向的物件不同。 developer版是蘋果公司給開發者測試使用的,需要蘋果開發者帳號才能收到下載併升級,是

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

docker掛載目錄權限問題怎麼解決 docker掛載目錄權限問題怎麼解決 Feb 29, 2024 am 10:04 AM

在Docker中,掛載目錄的權限問題通常可以透過以下方法解決:使用-v參數指定掛載目錄時新增權限相關的選項。可以透過在掛載的目錄後面新增:ro或:rw來指定掛載目錄的權限,分別表示只讀和讀寫權限。例如:dockerrun-v/host/path:/container/path:roimage_name在Dockerfile中定義USER指令來指定容器中執行的用戶,以確保容器內部的操作符合權限要求。例如:FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

Java 函數的存取權限修飾符之 public 使用指南 Java 函數的存取權限修飾符之 public 使用指南 Apr 26, 2024 am 08:39 AM

Javapublic存取權限修飾符允許函數從任何位置訪問,用於聲明公共API、定義跨包或類別共享的工具和實用程式。具體用法如下:語法:public返回值類型函數名稱(參數列表){...}場景:需要從任何地方存取的函數、公共API中的方法、共享的工具或實用程序

php拿不到name怎麼辦 php拿不到name怎麼辦 Nov 24, 2022 am 09:56 AM

php拿不到name是因為當表單元素的name和id的值不一樣的時候,瀏覽器是不能識別的,其解決方法:1、檢查部分錶單元素和框架元素是否用了name;2、檢查只能賦ID不能賦name的元素;3、針對多重選取框checkbox,可使用「join(',', $__POST['name'])」組成資料。

Vue3中setup怎麼加name Vue3中setup怎麼加name May 13, 2023 am 09:40 AM

Vue3中name有什麼用呢? 1.在遞歸組件的時候需要定義name2.配合keep-aliveincludeexclude可以緩存組件3.在Vue有報錯或調試的時候可以看到組件的nameVue3定義name1.自動產生只要在script開啟setup語法糖模式單文件組件會自動根據文件名生成對應的name選項例如Tree.vue那他的name就是Tree自動生成,這樣做有一個弊端如果想修改name需要修改組件名稱如果有地方import該組件需要一併修改。 2.在開啟一個script用來定義name

Java程式展示不同的存取級別 Java程式展示不同的存取級別 Aug 19, 2023 pm 10:09 PM

Accessmodifiersareusedtosetthefeatureofvisibilityofsomeparticularclasses,interfaces,variables,methods,constructors,datamembers,andthesettermethodsinJavaprogramminglanguage.在Java環境中,我們有不同類型的存取修飾符。預設-如果我們聲明一個函數,它只會在特定的包中可見。 Private-如果我們宣告一個函數,它只能在特定的類別中可

java中的public修飾符怎麼用 java中的public修飾符怎麼用 Apr 18, 2023 pm 06:04 PM

1、任何其他類別都可以存取被宣告為public的類別、方法、建構方法和介面。 2.若相互存取的public類別分佈在不同的套件中,則需要匯入對應public類別所在的套件。由於類別的繼承,所有的公共方法和變數都可以由其子類別繼承。實例publicclassdemo1{publicstaticvoidmain(String[]args){Personp1=newPerson();p1.fn();System.out.println(p1.a);//100System.out.println(p1.scorce);/

See all articles