백엔드 개발 PHP 튜토리얼 php之面向对象_PHP教程

php之面向对象_PHP教程

Jul 13, 2016 am 10:32 AM
aspnet 소프트웨어 프로그래밍

  讲到面向对象 先回顾下以前的编程思路,所谓编程思路就是根据知识本质原理通过逻辑推理程序的过程,编程思路,讲究的是先明确要做的事情是怎么。离开代码的情况下,自己也要能明白这一件事情怎么做。而不是把代码背一遍。跟据要做的事情,去确认各种已知条件,没有条件的要自己创造条件。也就是:知道条件,知道结果,求过程。 在实际程序中 我们往往要做很多的准备工作 去创造满足条件,比如要输出mysql的一段数据我们需要准备分页计算,才知道要从哪里输出到哪里,往往一个程序中。一个功能,一个流程,不能满足整个功能的需要。需要好几个流程配合才能完成,比如,当网页打开的时候做什么,当表单提交的时候做什么,没有提交做什么,数据库连不上的时候做什么连上的时候做什么。 当没有表单提交来的时候($_POST 为空的时候),我们就显示表单。有数据提交来的时候,我们就连接数据库,整理SQL语句,写入数据库。然后给用户一个提示性的页面。总结下来 ,我们整个程序在思考的时候 就会这么想 程序运行到这里的时候程序需要做什么,怎么做,才能满足下一个流程的需求,这几个流程组合起来,才能满足整个功能的需求,这种思考方式,我们称之为面向过程,面向过程 总结下来 思考模式有一个共通的特点:什么时候做什么,怎么做,每一个流程 每一步。这就是面向过程。

  其实在我们写代码的时候 九成以上都是面向过程,而相对的面向对象 只是一种思考方式的名字,很多的时候我们也会使用面向对象的方式思考 只是自己不知道罢了,以下代码是一个简单的例子:

<span $file</span> = "test.txt"<span ;//指定打开的文件
</span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );//打开文件
</span><span $data</span> = <span fread</span>(<span $fp</span>, 1024<span );//读取数据赋值
</span><span fclose</span>(<span $fp</span><span );//关闭文件
</span><span echo</span> <span $data</span>;//输出
로그인 후 복사

一段代码对应了一个过程

  我们在读取数据库的时候现在很多人应该是这么思考的了。//连接数据库//查询数据库//显示结果,

  如果是身份验证。还多一个流程。//连接数据库//查询数据库//对比用户名和密码//显示结果。这个注释其实就是思路的描述,当我们写代码熟练到一定程度的时候,就已经没必要去一行一行的想了。往往想到一个流程,就是几行代码,但是,代码实际的功能,必须和思考的过程吻合。

还是上面的一段代码

<span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
</span><span $data</span> = <span fread</span>(<span $fp</span>, 1024<span );
</span><span fclose</span>(<span $fp</span><span );
</span><span //整体注释就是:</span><span 读取&ldquo;文件&rdquo;的&ldquo;内容&rdquo;<br /><br /></span> //如果我换成另一个同样功能函数呢
로그인 후 복사
  $file = "test.txt";
  $data = file_get_contents($file);
<span  </span>
로그인 후 복사

这个写法,更符合我们刚才的描述:读取文件内容。在这里,$file 我们思考的时候,把它看成了一个文件。

  又比如 对于图形处理过程我们可以理解为:创建一张图像,往图像里写字,往图像里画线,输出图像,把这个资源量看成这张图像本身。

  所谓的面向对象就是思考模式的描述,在这种思考模式下我们把要处理的各个东西想象成一个个实体,读取文件 处理数据 写入文件 。。创建图像 在图像上绘画 在图像上写字 输出图像 虽然从代码本质上来解读的话它们还是一个个的各种量,这一点自己潜意识清楚就可以了。在思考和描述的时候,要是也一个个这么想。会给思考带来一定的困难。而用上面的这种思考和描述方式。就简单得多了,这种思考方式就是面向对象,类似上面面向过程那样的一句话就是:什么时候 做什么。

  面向过程是:什么时候,做什么,怎么做
  面向对象是:什么时候,什么东西,做什么。在面向对象的时候少了一个怎么做 那是因为面向对象的前提是你已经知道怎么做了,这也是我们为什么总是先学习面向过程 如果我们一件事情 怎么做都不知道,就谈不上什么思考模式了。其实对于 图像处理函数就是基于面向对象思考模式开发的 从头到尾都是对这张图片做什么,思考模式,并不局限于书写方式,并不是说这么写就是面向对象 那样写 就是面向过程, 在我们精通了各种功能的实现手法以后。我们往往会通过封装来重复使用代码。那怎么封装更合理呢。 这个时候,看思考方式,之前说过。思路描述,要能和代码吻合。那么封装就不是随意的封装了,封装好的函数和类, 用起来的时候最好能和思考描述的一样,是书写格式。。和思路描述。。尽可能的吻合。

比如,我把刚才读取文件的过程。封装成一个函数
<span function</span> read(<span $file</span><span ) {

}

</span><span //</span><span 读取文件</span>
<span $data</span> = read(<span $file</span>);
로그인 후 복사

符合度百分之百,当然前提你得知道怎么封装这样一个函数,在此由于$file是文件名 将它视为文件有点牵强,但我们可以理解为文件的路径path,所以 最好使用类去封装。

  用我们日常生活的常识来理解对象的话 对象时一个个实体,那么它对应的就应该有一些特性,比如说文件名是什么,路径是多少,文件大小多少,比如说我们人 有身高体重名字性别,但是,在我们平时的制作手法里面。我们要知道一个文件大小。就必须用 filesize 函数去取得。这就像我问你身高是多少,你每次都要重新量一下。 这和我们常识中的对象,存在一定的差距,使得我们在思考描述代码的时候。代码的符合度不够。 但是类可以暂时记住这些特征值,我们称之为对象的属性,属性,一定是一个准确的值,而过程在类里面称为方法,类里面 可以声明一些特殊的变量,这些变量外部不能直接访问到,这些就是类的属性,要想访问一个类的属性和方法一样使用-> 但是不需要写$,假如我们有一个file类 有一个属性

<span $file</span> = <span new</span> <span file</span><span ();
</span><span echo</span> <span $file</span>->size;
로그인 후 복사

用这种方式来访问一个对象变量的属性 怎么定义它 我们先不急 慢慢道来 ,我们先回到思路上,今天我们封装一个文件读写类 我们的代码在需要文件读写的时候我们这样思考:读取文件 处理数据 写入文件 ,这个思路正是文件型计数器的思路。

那么,我们最好的写法是

<span $data</span> = read(<span $file</span><span );
</span><span $data</span> +=1<span ;
write(</span><span $file</span>, <span $data</span>);
로그인 후 복사
    <span function</span> read(<span $file</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
        </span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $data</span><span ;
    }
    
    </span><span function</span> write(<span $file</span>, <span $data</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
        </span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $rs</span><span ;
    }</span>
로그인 후 복사

这两个函数。都是同属于文件操作的。我们把它封装成为类

<span class</span><span  fileclass {
    
    </span><span function</span> read(<span $file</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
        </span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $data</span><span ;
    }
    
    </span><span function</span> write(<span $file</span>, <span $data</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
        </span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $rs</span><span ;
    }

}<br /><br /></span>
로그인 후 복사

调用这个类的时候。代码是这么写的。

<span $fc</span> = <span new</span><span  fileclass();<br />//读取文件
</span><span $data</span> = <span $fc</span>->read(<span $file</span><span );
</span><span $data</span> +=1<span ;<br />//写入文件
</span><span $fc</span>->write(<span $file</span>, <span $data</span>);
로그인 후 복사
然而这里有个和思路不符的地方,上下的两个$file可以是两个不同的文件,也就是说我可以从文件A读取内容写入到文件B中,但是这样一来就是两个文件,就是两个对象,这个和思路不符,在这个代码中,我们没办法准确的描述出。哪一个量。可以视为这个文件。 尽管使用了类从思维上还是面向的过程,之前说过 作为对象应该有自己的属性,对象 应该知道自己的属性,我们希望 用一个实例化的量 来表示这个对象,一个对象 一旦出现就知道自己的属性,就如我们都知道的姓名和性别,要做到这几点,我们需要修改类的结构,一开始就知道。。就是说。一开始就得知道文件名。而且一开始就要读取文件大小。 毕竟,没有这些过程 不可能凭空得到。在类里面。构造函数可以帮我们做到这一点。构造函数。会在类实例化的时候立即执行。我们可以在构造函数里读取文件的大小,要读取文件大小,同样需要知道文件名。 这就需要一个条件。可以通过函数参数传入。
   <span public</span> <span function</span> __construct(<span $file</span><span ) {
        </span><span $size</span> = <span filesize</span>(<span $file</span><span );
    }</span>
로그인 후 복사
我们都知道,自定义函数内部变量和外部变量。不是同一个世界的。 也就是说。在这里给 $size 赋值。属性 size 是得不到的。 在这里 在类的方法里面,要想访问类的属性和其他方法。需要用关键字 $this->
<?<span php
</span><span class</span><span  fileclass {
    
    </span><span public</span> <span $size</span> = 0<span ;
     </span><span public</span> <span $name</span> = ''<span ;

    
    </span><span public</span> <span function</span> __construct(<span $file</span><span ) {
        </span><span $size</span> = <span filesize</span>(<span $file</span><span );
        </span><span $this</span>->size = <span $size</span><span ;
         </span><span $this</span>->name = <span $file</span><span ;
    }

    </span><span function</span> read(<span $file</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "r"<span );
        </span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $file</span><span ));
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $data</span><span ;
    }
    
    </span><span function</span> write(<span $file</span>, <span $data</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $file</span>, "w"<span );
        </span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $rs</span><span ;
    }

}
</span><span $fc</span> = <span new</span> fileclass("test.txt"<span );

</span><span echo</span> "文件名:" . <span $fc</span>-><span name;
</span><span echo</span> "文件大小:" . <span $fc</span>-><span size;

</span>?>
로그인 후 복사

现在回到read方法 既然他已经有属性 知道自己名字和大小了 那在这里就不用再传文件名进去了,

    <span function</span><span  read() {
        </span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "r"<span );
        </span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $this</span>-><span size));
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $data</span><span ;
    }
    </span>
로그인 후 복사
同样的。写入的时候。也不需要再通知文件名了。
<span class</span><span  fileclass {
    
    </span><span public</span> <span $size</span> = 0<span ;
    </span><span public</span> <span $name</span> = ''<span ;
    
    </span><span public</span> <span function</span><span  __construct($file) {
        </span><span $size</span> = <span filesize</span>(<span $file</span><span );
        </span><span $this</span>->size = <span $size</span><span ;
        </span><span $this</span>->name = <span $file</span><span ;
    }

    </span><span function</span><span  read() {
        </span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "r"<span );
        </span><span $data</span> = <span fread</span>(<span $fp</span>, <span filesize</span>(<span $this</span>->name<span ));
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $data</span><span ;
    }
    
    </span><span function</span> write(<span $data</span><span ) {
        </span><span $fp</span> = <span fopen</span>(<span $this</span>->name, "w"<span );
        </span><span $rs</span> = <span fwrite</span>(<span $fp</span>, <span $data</span><span );
        </span><span fclose</span>(<span $fp</span><span );
        </span><span return</span> <span $rs</span><span ;
    }

}</span>
로그인 후 복사
现在,整个类就变成了这个样子。 回到刚才的计数器代码。
<span $fc</span> = <span new</span> fileclass("test.txt"<span );
//读取文件
</span><span $data</span> = <span $fc</span>-><span read();

</span><span $data</span> +=1<span ;
</span><span echo</span> <span $data</span><span ;
//写入文件
</span><span $fc</span>->write(<span $data</span>);
로그인 후 복사
 由于读取是一个过程,也就是一个方法。从哪读取的? $fc  $fc 此时,可以完全的理解为。就是文件本身了。   总结下:面向对象这种思维方式。讲究的是:什么时候,什么东西,做什么 。为了能让代码书写的时候,更符合这种描述方式,我们需要把过程封装起来。而类。只不过是为了能更准确的符合这种思考描述方式而做的准备性封装,不是说用类就是在用 面向对象 编程了。一个类写出来以后。如果在使用的过程中。不符合面向对象的思维方式。。那也只是普通的类,面向对象思维方式。。一定要有准确的对象。。可以把某个量。视为一个实体的东西。也就是“对象” 。归根到底其实是先有思路才有类的。

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/755381.htmlTechArticle讲到面向对象 先回顾下以前的编程思路,所谓编程思路就是根据知识本质原理通过逻辑推理程序的过程,编程思路,讲究的是先明确要做的...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Vue.js와 ASP.NET의 조합은 웹 애플리케이션의 성능 최적화 및 확장을 위한 팁과 제안을 제공합니다. Vue.js와 ASP.NET의 조합은 웹 애플리케이션의 성능 최적화 및 확장을 위한 팁과 제안을 제공합니다. Jul 29, 2023 pm 05:19 PM

Vue.js와 ASP.NET의 결합은 웹 애플리케이션의 성능 최적화와 확장을 위한 팁과 제안을 제공합니다. 웹 애플리케이션의 급속한 발전으로 인해 성능 최적화는 개발자에게 필수적이고 중요한 작업이 되었습니다. 인기 있는 프런트 엔드 프레임워크인 Vue.js를 ASP.NET과 결합하면 더 나은 성능 최적화 및 확장을 달성하는 데 도움이 될 수 있습니다. 이 문서에서는 몇 가지 팁과 제안 사항을 소개하고 몇 가지 코드 예제를 제공합니다. 1. HTTP 요청 감소 HTTP 요청 수는 웹 애플리케이션의 로딩 속도에 직접적인 영향을 미칩니다. 통과하다

ASP.NET 프로그램의 MySQL 연결 풀 사용 및 최적화 기술 ASP.NET 프로그램의 MySQL 연결 풀 사용 및 최적화 기술 Jun 30, 2023 pm 11:54 PM

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법은 무엇입니까? 소개: MySQL은 고성능, 안정성 및 사용 용이성을 특징으로 널리 사용되는 데이터베이스 관리 시스템입니다. ASP.NET 개발에서는 데이터 저장을 위해 MySQL 데이터베이스를 사용하는 것이 일반적인 요구 사항입니다. 데이터베이스 연결의 효율성과 성능을 향상시키기 위해서는 MySQL 연결 풀을 올바르게 사용하고 최적화해야 합니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법을 소개합니다.

생성 AI가 소프트웨어 개발을 변화시키는 10가지 방법 생성 AI가 소프트웨어 개발을 변화시키는 10가지 방법 Mar 11, 2024 pm 12:10 PM

번역기 | 검토자: Chen Jun | Chonglou 1990년대에 사람들이 소프트웨어 프로그래밍을 언급할 때 이는 일반적으로 편집기를 선택하고 코드를 CVS 또는 SVN 코드 베이스로 확인한 다음 코드를 실행 파일로 컴파일하는 것을 의미했습니다. Eclipse 및 Visual Studio와 같은 해당 통합 개발 환경(IDE)은 프로그래밍, 개발, 문서화, 구성, 테스트, 배포 및 기타 단계를 완전한 소프트웨어 개발 수명 주기(SDLC)에 통합하여 개발자의 작업 효율성을 향상시킬 수 있습니다. 최근 몇 년 동안 널리 사용되는 클라우드 컴퓨팅 및 DevSecOps 자동화 도구는 개발자의 포괄적인 역량을 향상시켜 더 많은 기업이 소프트웨어 애플리케이션을 보다 쉽게 ​​개발, 배포 및 유지 관리할 수 있게 되었습니다. 오늘날 생성적 AI는 차세대 개발입니다.

ASP.NET 프로그램에서 MySQL에 다시 연결하는 방법은 무엇입니까? ASP.NET 프로그램에서 MySQL에 다시 연결하는 방법은 무엇입니까? Jun 29, 2023 pm 02:21 PM

ASP.NET 프로그램에서 MySQL에 다시 연결하는 방법은 무엇입니까? ASP.NET 개발에서는 MySQL 데이터베이스를 사용하는 것이 매우 일반적입니다. 그러나 네트워크나 데이터베이스 서버 문제로 인해 데이터베이스 연결이 중단되거나 타임아웃되는 경우가 있습니다. 이 경우, 프로그램의 안정성과 신뢰성을 보장하기 위해 연결이 끊어진 후 연결을 다시 설정해야 합니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결을 다시 연결하는 방법을 소개합니다. 필요한 네임스페이스를 먼저 참조하려면 코드 파일의 헤드에서 참조하세요.

Vue.js와 ASP.NET의 결합으로 엔터프라이즈급 애플리케이션의 개발 및 배포가 가능합니다. Vue.js와 ASP.NET의 결합으로 엔터프라이즈급 애플리케이션의 개발 및 배포가 가능합니다. Jul 29, 2023 pm 02:37 PM

Vue.js와 ASP.NET의 결합을 통해 엔터프라이즈급 애플리케이션의 개발 및 배포가 가능해졌습니다. 오늘날 빠르게 발전하는 인터넷 기술 분야에서 엔터프라이즈급 애플리케이션의 개발 및 배포가 점점 더 중요해지고 있습니다. Vue.js와 ASP.NET은 프런트엔드 및 백엔드 개발에 널리 사용되는 두 가지 기술을 결합하면 엔터프라이즈 수준 애플리케이션의 개발 및 배포에 많은 이점을 가져올 수 있습니다. 이 기사에서는 Vue.js 및 ASP.NET을 사용하여 코드 예제를 통해 엔터프라이즈 수준 애플리케이션을 개발하고 배포하는 방법을 소개합니다. 먼저, 설치해야 합니다.

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하는 방법은 무엇입니까? ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하는 방법은 무엇입니까? Jun 29, 2023 pm 12:56 PM

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하는 방법은 무엇입니까? 인터넷의 발달과 데이터 양의 증가로 인해 데이터베이스 접속 및 연결에 대한 수요도 증가하고 있습니다. 데이터베이스의 성능과 안정성을 향상시키기 위해서는 커넥션 풀링(Connection Pooling)이 필수적인 기술이 되었습니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 구성하고 사용하여 데이터베이스의 효율성과 응답 속도를 향상시키는 방법을 주로 소개합니다. 1. 커넥션 풀링의 개념과 기능 커넥션 풀링은 데이터베이스 커넥션을 재사용하는 기술이다.

aspnet에 내장된 개체는 무엇입니까? aspnet에 내장된 개체는 무엇입니까? Nov 21, 2023 pm 02:59 PM

ASP.NET의 기본 제공 개체에는 "요청", "응답", "세션", "서버", "응용 프로그램", "HttpContext", "Cache", "Trace", "Cookie" 및 "Server.MapPath": 1. 클라이언트가 발행한 HTTP 요청을 나타내는 요청 2. 응답: 웹 서버가 클라이언트에 반환한 HTTP 응답을 나타냅니다. 클라이언트 등

Linux에서 Visual Studio를 사용한 ASP.NET 개발을 위한 권장 구성 Linux에서 Visual Studio를 사용한 ASP.NET 개발을 위한 권장 구성 Jul 06, 2023 pm 08:45 PM

Linux에서 ASP.NET 개발을 위해 Visual Studio를 사용하기 위한 권장 구성 개요: 오픈 소스 소프트웨어의 개발과 Linux 운영 체제의 인기로 인해 점점 더 많은 개발자가 Linux에서 ASP.NET을 개발하기 시작하고 있습니다. 강력한 개발 도구인 Visual Studio는 항상 Windows 플랫폼에서 지배적인 위치를 차지해 왔습니다. 이 문서에서는 Linux에서 ASP.NE용 VisualStudio를 구성하는 방법을 소개합니다.

See all articles