第八节--访问方式--ClassesandObjectsinPHP58_PHP教程
/* +-------------------------------------------------------------------------------+ | = 本文为Haohappy读> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +-------------------------------------------------------------------------------+ */ 第八节--访问方式 PHP5的访问方式允许限制对类成员的访问. 这是在PHP5中新增的功能,但在许多面向对象语言中都早已存在. 有了访问方式,才能开发一个可靠的面向对象应用程序,并且构建可重用的面向对象类库. 像C++和Java一样,PHP有三种访问方式:public,private和protected. 对于一个类成员的访问方式,可以是其中之一. 如果你没有指明访问方式,默认地访问方式为public. 你也可以为静态成员指明一种访问方式,将访问方式放在static关键字之前(如public static). Public成员可以被毫无限制地访问.类外部的任何代码都可以读写public属性. 你可以从脚本的任何地方调用一个public方法. 在PHP的前几个版本中,所有方法和属性都是public, 这让人觉得对象就像是结构精巧的数组. Private(私有)成员只在类的内部可见. 你不能在一个private属性所在的类方法之外改变或读取它的值. 同样地,只有在同一个类中的方法可以调用一个private方法. 继承的子类也不能访问父类中的private 成员. 要注意,类中的任何成员和类的实例都可以访问private成员. 看例子6.8,equals方法将两个widget进行比较.==运算符比较同一个类的两个对象,但这个例子中每个对象实例都有唯一的ID.equals方法只比较name和price. 注意equals方法如何访问另一个Widget实例的private属性. Java和C都允许这样的操作. Listing 6.8 Private members name = $name; $this->price = floatval($price); $this->id = uniqid(); } //checks if two widgets are the same 检查两个widget是否相同 public function equals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget->price)); } } $w1 = new Widget(Cog, 5.00); $w2 = new Widget(Cog, 5.00); $w3 = new Widget(Gear, 7.00); //TRUE if($w1->equals($w2)) { print("w1 and w2 are the same
n"); } //FALSE if($w1->equals($w3)) { print("w1 and w3 are the same
n"); } //FALSE, == includes id in comparison if($w1 == $w2) //不等,因为ID不同 { print("w1 and w2 are the same
n"); } ?> 如果你对面向对象编程不熟悉,你可能想知道用private成员的目的是什么. 你可以回忆一下封装和耦合的想法,这在本章开头我们有讨论过. Private成员有助于封装数据. 他们可以隐藏在一个类内部而不被类外部的代码接触到. 同时他们还有助于实现松散的耦合. 如果数据结构外的代码不能直接访问内部属性,那么就不会产生一个隐性的关联性. 当然,大部分private属性仍然可以被外部代码共享. 解决方法是用一对public方法,一个是get(获取属性的值),另一个是set(设置属性的值). 构造函数也接受属性的初始值. 这使得成员间的交流通过一个狭窄的,经过良好限定的接口来进行. 这也提供改变传递给方法的值的机会. 注意在例子6.8中,构造函数如何强制使price成为一个float数(floadval()). Protected(受保护的) 成员能被同个类中的所有方法和继承出的类的中所有方法访问到. Public属性有违封装的精神,因为它们允许子类依赖于一个特定的属性来书写.protected方法则不会带来这方面的担忧.一个使用protected方法的子类需要很清楚它的父类的结构才行. 例子6.9由例子6.8改进而得到,包含了一个Widget的子类Thing. 注意Widget现在有一个叫作getName的protected方法. 如果Widget的实例试图调用protected方法将会出错: $w1->getName()产生了一个错误. 但子类Thing中的getName方法可以调用这个protected方法.当然对于证明Widget::getName方法是protected,这个例子显得过于简单. 在实际情况下,使用protected方法要依赖于对对象的内部结构的理解. Listing 6.9 Protected members name = $name; $this->price = floatval($price); $this->id = uniqid(); } //checks if two widgets are the same public function equals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget->price)); } protected function getName() { return($this->name); } } class Thing extends Widget { private $color; public function setColor($color) { $this->color = $color; } public function getColor() { return($this->color); } public function getName() { return(parent::getName()); } } $w1 = new Widget(Cog, 5.00); $w2 = new Thing(Cog, 5.00); $w2->setColor(Yellow); //TRUE (still!) 结果仍然为真 if($w1->equals($w2)) { print("w1 and w2 are the same
n"); } //print Cog 输出 Cog print($w2->getName()); ?> 一个子类可能改变通过覆写父类方法来改变方法的访问方式,尽管如此,仍然有一些限制. 如果你覆写了一个public类成员,他子类中必须保持public. 如果你覆写了一个protected成员,它可保持protected或变成public.Private成员仍然只在当前类中可见. 声明一个与父类的private成员同名的成员将简单地在当前类中建立一个与原来不同的成员. 因此,在技术上你不能覆写一个private成员. Final关键字是限制访问成员方法的另一个方法. 子类不能覆写父类中标识为final的方法. Final关键字不能用于属性. //haohappy注:PHP5的面向对象模型仍然不够完善,如final不像Java中那样对Data,Method甚至Class都可以用.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











JsonNode는 JSON을 JsonNode 인스턴스로 읽고 JsonNode를 JSON으로 쓸 수 있는 Jackson의 JSON 트리 모델입니다. Jackson을 사용하면 ObjectMapper 인스턴스를 생성하고 readValue() 메서드를 호출하여 JSON을 JsonNode로 읽을 수 있습니다. JsonNode 클래스의 get() 메서드를 사용하여 필드, 배열 또는 중첩 개체에 액세스할 수 있습니다. asText() 메서드를 사용하여 유효한 문자열 표현을 반환하고 JsonNode 클래스의 asInt() 메서드를 사용하여 노드의 값을 Javaint로 변환할 수 있습니다. 아래 예에서는 Json에 액세스할 수 있습니다.

iOS17에서 Apple은 앱이 사진에서 볼 수 있는 내용을 더 강력하게 제어할 수 있습니다. 앱별로 앱 액세스를 관리하는 방법을 알아보려면 계속 읽어보세요. iOS에서는 Apple의 앱 내 사진 선택기를 사용하여 특정 사진을 앱과 공유하고 나머지 사진 라이브러리는 비공개로 유지할 수 있습니다. 앱은 전체 사진 라이브러리에 대한 액세스를 요청해야 하며 선택적으로 앱에 다음 액세스 권한을 부여할 수 있습니다. 제한된 액세스 – 앱은 선택할 수 있는 이미지만 볼 수 있으며, 이는 앱에서 언제든지 또는 설정 > 개인 정보 보호 및 보안>사진을 클릭하면 선택한 이미지를 볼 수 있습니다. 전체 액세스 - 앱에서 사진을 볼 수 있음

Python의 Mutagen 및 eyeD3 모듈을 사용하여 오디오 파일의 메타데이터에 액세스할 수 있습니다. 비디오 메타데이터의 경우 Python에서 영화와 OpenCV 라이브러리를 사용할 수 있습니다. 메타데이터는 오디오, 비디오 데이터 등 다른 데이터에 대한 정보를 제공하는 데이터입니다. 오디오 및 비디오 파일의 메타데이터에는 파일 형식, 파일 해상도, 파일 크기, 지속 시간, 비트 전송률 등이 포함됩니다. 이 메타데이터에 액세스함으로써 미디어를 보다 효율적으로 관리하고 메타데이터를 분석하여 유용한 정보를 얻을 수 있습니다. 이 기사에서는 오디오 및 비디오 파일의 메타데이터에 액세스하기 위해 Python에서 제공하는 일부 라이브러리 또는 모듈을 살펴보겠습니다. 오디오 메타데이터에 액세스 오디오 파일 메타데이터에 액세스하기 위한 일부 라이브러리는 다음과 같습니다.

Tomcat이 배포 후 war 패키지에 성공적으로 액세스할 수 없는 문제를 해결하려면 특정 코드 예제가 필요합니다. 널리 사용되는 Java 웹 서버인 Tomcat을 사용하면 개발자가 자신이 개발한 웹 애플리케이션을 배포용 war 파일로 패키징할 수 있습니다. 그러나 때로는 잘못된 구성이나 다른 이유로 인해 war 패키지에 성공적으로 액세스할 수 없는 문제가 발생할 수 있습니다. 이 기사에서는 이 딜레마를 해결하는 몇 가지 구체적인 코드 예제를 제공합니다. 1. Tomcat 서비스 확인

Win7에서 파일을 수정할 때 액세스 거부 문제를 해결하는 방법은 무엇입니까? 일부 시스템 파일을 수정할 때 작업을 수행할 권한이 없다는 메시지가 자주 표시됩니다. 폴더 권한을 끄거나 관리자 권한을 얻을 수 있습니다. 이러한 파일을 수정해야 하는 사용자는 다음의 자세한 튜토리얼을 살펴보시기 바랍니다. win7에서 파일을 수정할 때 액세스가 거부되는 문제에 대한 해결 방법: 1. 먼저 해당 폴더를 선택하고 위의 도구를 클릭한 다음 폴더 옵션을 선택합니다. 2. 보기 탭으로 들어갑니다. 3. 단순 파일 공유 사용을 선택 취소하고 확인합니다. 4. 그런 다음 해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭합니다. 5. 보안 탭으로 들어갑니다. 6. 아이콘 위치를 선택하고 고급을 클릭합니다. 7

폴더 공유는 실제로 가정이나 회사 네트워크 환경에서 매우 유용한 기능입니다. 이를 통해 다른 사용자와 폴더를 쉽게 공유할 수 있으므로 파일 전송 및 공유가 쉬워집니다. Win10 Home Edition 공유 폴더에 접근할 수 없습니다. 해결 방법: 해결 방법 1: 네트워크 연결 및 사용자 권한 확인 Win10 공유 폴더를 사용하려면 먼저 네트워크 연결 및 사용자 권한이 정상적인지 확인해야 합니다. 네트워크 연결에 문제가 있거나 사용자에게 공유 폴더에 대한 접근 권한이 없는 경우 접근이 불가능할 수 있습니다. 1. 먼저, 컴퓨터와 공유 폴더가 위치한 컴퓨터가 동일한 LAN에 있고 정상적으로 통신할 수 있도록 네트워크 연결이 원활한지 확인하십시오. 2. 두 번째로 사용자 권한을 확인하여 현재 사용자에게 파일 공유 권한이 있는지 확인하세요.

PHP 개발에서 외부 리소스에 액세스하고 호출하는 문제를 해결하려면 특정 코드 예제가 필요합니다. PHP 개발에서는 API 인터페이스, 타사 라이브러리 또는 기타 서버 리소스와 같은 외부 리소스에 액세스하고 호출해야 하는 상황에 자주 직면합니다. . 이러한 외부 리소스를 처리할 때 성능과 안정성을 보장하면서 안전하게 액세스하고 호출하는 방법을 고려해야 합니다. 이 문서에서는 몇 가지 일반적인 솔루션을 설명하고 해당 코드 예제를 제공합니다. 1. 컬 라이브러리를 사용하여 외부 리소스를 호출합니다. 컬은 매우 강력한 오픈 소스 라이브러리입니다.

iOS에서는 카메라 장치에 대한 고유한 액세스 권한이 없습니다. 공식 사양 권장 사항은 다음과 같습니다. - 이 사양의 사용자 에이전트 구현은 마이크나 카메라를 통해 콘텐츠 캡처를 시작하기 전에 사용자 동의를 구하는 것이 좋습니다. 이는 사용자 데이터 개인 정보 보호와 관련된 규제, 법률 및 모범 사례 요구 사항을 충족하는 데 필요할 수 있습니다. 또한 입력 장치가 활성화되면 사용자에게 표시를 제공하고 사용자가 이러한 캡처를 종료할 수 있도록 하는 사용자 에이전트 구현이 권장됩니다. 마찬가지로, 사용자 에이전트는 여러 장치가 있는 경우 사용할 정확한 미디어 캡처 장치를 사용자가 선택할 수 있도록 허용하는 등의 사용자 컨트롤을 제공하는 것이 좋습니다. 비디오 캡처 모드에서 사운드 캡처를 비활성화합니다.
