목차
回复内容:

PHP private

Jun 06, 2016 pm 08:13 PM
php

写了一段时候PHP,回过头来在看PHP.感觉还是有很多地方不明白.
今天在看到private的时候遇到一个小问题, 就发个帖子请教一下大家!

<?php
class Father
{
    protected $name = 'Father';

    public function getName()
    {
        return $this->name;
    }
}

class Son extends Father
{
    protected $name = 'Son';
}

$son = new Son();
echo $son->getName();   //返回的是Son 
로그인 후 복사
로그인 후 복사

另一种情况

<?php
class Father
{
    private $name = 'Father';

    public function getName()
    {
        return $this->name;
    }
}

class Son extends Father
{
    protected $name = 'Son';

}

$son = new Son();
echo $son->getName();    //返回的确实father
로그인 후 복사
로그인 후 복사

这里就有一个问题, php对象属性的值, 在程序运行的过程中是怎么确定的!
有什么规则,或者说是一个怎么样的访问过程!

回复内容:

写了一段时候PHP,回过头来在看PHP.感觉还是有很多地方不明白.
今天在看到private的时候遇到一个小问题, 就发个帖子请教一下大家!

<?php
class Father
{
    protected $name = 'Father';

    public function getName()
    {
        return $this->name;
    }
}

class Son extends Father
{
    protected $name = 'Son';
}

$son = new Son();
echo $son->getName();   //返回的是Son 
로그인 후 복사
로그인 후 복사

另一种情况

<?php
class Father
{
    private $name = 'Father';

    public function getName()
    {
        return $this->name;
    }
}

class Son extends Father
{
    protected $name = 'Son';

}

$son = new Son();
echo $son->getName();    //返回的确实father
로그인 후 복사
로그인 후 복사

这里就有一个问题, php对象属性的值, 在程序运行的过程中是怎么确定的!
有什么规则,或者说是一个怎么样的访问过程!

我来说说我的看法。

getName 是一个 public 方法,那么 Son 类会继承 Father 类的这个方法,这一点没有疑问,对吧。

那么先看看第一段代码的执行思路。

Son 类实例化之后,执行 getName 方法。由于这个方法是从 Father 类继承而来的,所以实际上这个方法访问的是 Father 类的 $name 这个属性。第一段代码里 $nameprotected 类型的,在子类中这个属性被继承下来并被改写,那么 getName 就会继续去查找子类里的这个属性。

而在第二段代码的里,$name 属性已经被定义成 private 类型,所以在子类执行 getName 方法时,会先查找父类里的 $name 属性。这时候 $name 是无法被继承的,所以就返回了父类的值。

不知道我这样描述的是否详细,能让题主理解?

以往的工程里,我写的类访问级别只到 protected,从来不用 private,我觉得这样更符合面向对象的思想。

你试试看这个 https://segmentfault.com/q/1010000000133607
是不是你的也有警告提示但是因为设置的原因没有显示出来呢?
按说父类声明了 private $attr的话子类可以 private $attr,但是不能 protected $attr 或者 public $attr,否则会很混乱,类似的例子 父类 protected $attr;子类 public $attr;那返回哪个。

我发现黑客新想法的最佳来源,并非是名字里有“计算机”三个字的领域,而是来自于其他的创作领域 --《黑客与画家》21页

既然已经面向对象了,那么对象这个词也肯定也不是空穴来风,话说世界万物皆对象,也不知道当初提出面向对象的人脑子里想的是谁家的对象。这个面向对象的概念大到了保持对整个世界的同理心!!!

你看看提出面向对象的人,都有这么高的Bigger。那我们学习面向对象,也至少不应该只局限在编程里。

说道爹,就应该好好唠一唠,这个是一个拼爹的时代。
我爹在前门有套房,我爹的媳妇我叫娘,我爹外号叫光头强。

<code>class Father {
    private $fatherHouse  = '我爹在前门的四合院,房产证上只写着爹的名字';
    protected $fatherWife = "我爹的媳妇";
    public $nickname      = "光头强";
    
    public function whereFatherHouse(){
        echo $this->fatherHouse;
    }

    public function callFatherWife(){
        echo $this->fatherWife;
    }
}</code>
로그인 후 복사

说到我啊,他们制造我的时候是这个样子

<code>class Me extends Father {
    protected $fatherWife = '娘';
}
$me = new Me();</code>
로그인 후 복사

我爹在前门有套房

<code>$me->whereFatherHouse(); </code>
로그인 후 복사

我爹的媳妇我叫娘

<code>$me->callFatherWife();</code>
로그인 후 복사

我的外号叫夜夜强

<code>$me->nickname = '夜夜强';</code>
로그인 후 복사

共有 谁都能给你起个外号,约束不了
私有 爹的房子,你始终改不成你的,只能炫耀下。
保护 家族中的一个属性

第一个父类name被重写了,所以就只有一个name。
第二个父类name没有被重写,所以调用父类的私有属性。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

See all articles