Inhaltsverzeichnis
回复讨论(解决方案)
Heim Backend-Entwicklung PHP-Tutorial 求教!PHP面向对象学习

求教!PHP面向对象学习

Jun 23, 2016 pm 02:06 PM

最近在学习PHP面向对象编程的过程中,遇到了些许麻烦,想劳烦大神们为我解答下。

1、类中的静态变量,使用静态变量可以减少资源的使用。那么静态变量应该用在什么情况下呢?它与全局变量的异同点又是什么呢?~(这个让我很迷茫)。

2、类中的常量。在类中定义的常量与在非类中定义的常量又有什么优缺点呢?~在什么样的情况下需要定义常量呢?~

3、有没有较好的PHP面向对象实例,可以进行学习呢?~若有,请给出相关链接。(不是要基础的学习,是要稍微深入的类实例)


在此,谢谢各位大神了。!!


回复讨论(解决方案)

1. 全局变量是所有的方法,函数,都可以用的,而且一变,全部变,而静态变量一般存在于类中,比如有A和B两个类,两个类下面都可以有全局变量CC, A下面的静态变量CC改了,不会影响B下面的CC.

2. 常量有一个特性,就是定义了就不能改变了,一般用于不会改动的地方,比如图片的存放位置咯,这种地方,也就是可能会改,但是至少很难会改动的情况下。

3. PHP手册里面介绍就比较全,如果要彻底的学习,可以试试C#或者JAVA,然后再来学PHP,对于面向对象的理解你会如鱼得水.

个人不是很专业,可能有些地方有疏忽,欢迎拍砖。

《PHP高级程序设计:模式、框架与测试 (高清中文PDF版)》
http://www.verycd.com/topics/2783113/

《PHP高级程序设计:模式、框架与测试 (高清中文PDF版)》
http://www.verycd.com/topics/2783113/  
 谢谢楼上分享,下载中。。。。

看一下PHP圣经就都会了,零零散散学不利索。

php手册吧,上面例子比较多,都有针对性,多试试吧

类中的静态变量,使用静态变量可以减少资源的使用。那么静态变量应该用在什么情况下呢?它与全局变量的异同点又是什么呢?

可以减少资源的使用?

我的理解是(分两方面):
0.类的静态变量分为“类本身的静态变量”(属于类),类方法的静态变量(属于类,但是定义的位置不一样)。
1.(存储空间)静态变量它属于整个类,这样实例化很多对象的时候就可以省下内存。
2.(运算时间)从底层来讲寻址实例变量花的时间要比类静态变量要少一点,但是类方法的静态变量那就不知道(牛人帮忙解答一下)。
什么情况下使用?
1.(属于类的静态变量)比如一个Person类你想记录实例化了多少个实例那用类的静态变量就能满足。(如一个地方有多少人口:__construct的时候加一个,__destruct的时候减一个)
2.(属于类的方法的静态变量)这种情况主要的“上下文相关”的时候(即本函数上次执行结果会直接或者间接影响本次执行结果的,如四则运算)。
它与全局变量的异同点又是什么呢?
全局变量顾名思义是全局的。面向对象编程很大的目的是为了实现“高内聚,低耦合”。就比如说人口总数$count 如果用全局变量那么下次碰到这个总数,那个总数的时候改动就大了;有时候代码很可能不是你一个人写的其它人要是也用了这个变量,那岂不是杯具了。。。但是如果使用类静态变量这个问题就不会有问题(至少每个类有自己的$count)

类中的常量。在类中定义的常量与在非类中定义的常量又有什么优缺点呢?
类中定义的常量与在非类中定义的常量区别顾名思义就是使用的范围,比如性别
Person::GENDER_MALE = '男'
Person::GENDER_FEMALE = '女'
Chicken::GENDER_MALE = '公'
Chicken::GENDER_FEMALE = '母'
Cat::GENDER_MALE = '雄'
Cat::GENDER_FEMALE = '雌'
如果定义在全局中定义这两个常量就照顾的不是那么周到了。

在什么样的情况下需要定义常量呢?
比如人的性别,动物的雌雄等等。如果不定义一个常量就用0|1 ,male|female万一male打错了变成mela那不是挺杯具的??而且假设某一天你想把用01表示改为用male和female表示那你要在搜索千万行代码。如果用常量不就是改一下定义的地方就好了。。。

#! /usr/bin/php<?phpclass Person{        public static $count = 0; ### 记录类的实例数量    const GENDER_MALE = 'male';    const GENDER_FEMALE = 'female';    private $_gender = self::GENDER_MALE;    private $_name = 'noname';    public function setName($name){        $this->_name = $name;        return $this;    }        public function __construct($name='' , $gender=self::GENDER_MALE){        self::$count++;        $this->_name = $name;        $this->_genger = $gender;    }    public function __destruct(){        self::$count--;    }        public function calc($action='add' , $num=1){        static $sum = 0;        if($action == 'add'){            $sum += $num;        }else if($action == 'sub'){            $sum -= $num;        }        echo 'now $sum = ' , $sum , "\n";        return $this;    }    public function getGender(){        return $this->_gender;    }    public function setGender($gender=self::GENDER_MALE){        $this->_gender = $gender;    }}$ary = array();foreach(range(1 , 100) as $_){    $ary[] = new Person("Person$_");}echo Person::$count , "\n"; ### 100个人unset($ary[15]);      ### 销毁一个echo Person::$count , "\n"; ### 99个人$me  = $ary[0]->setName("me");$you = $ary[1]->setName("you");foreach(range(1 , 3) as $_){ ###    $me->calc("add" , $_*2);    $you->calc("sub" , $_*3);    echo "================ \n";}echo $me->setGender(Person::GENDER_FEMALE);echo $me->getGender();
Nach dem Login kopieren

使用静态变量可以减少资源的使用???
类的静态属性与全局变量的区别在于作用范围不同
当从一个类实例化很多对象的时候,静态属性是公共数据区,也就是各个对象共享的
这与资源的消耗没什么关系

同样的,类常量与常量也只是作用范围不同
相似的还有,类的静态方法就是一组作用范围受限的函数

由于 php5.3 重新引入了命名空间的概念,那些“静态”的玩意就都将归位了

学习面向对象的编程,就要用面向对象的方法看问题
不要被那些翻译的极其糟糕的名词所迷惑


静态变量 self ,和 $this确实不是很好理解。
self 后面只能接 方法, 或者变量,但是不能给变量赋值!
我下面的写法报错!

<?php class father {	protected $var2;	function init()	{		//以下报错1		//self::var2 = 1900; //<br /><b>Parse error</b>:  parse error, unexpected '=' in <b>PHPDocument2</b> on line <b>6</b><br />		$this->var2 = 1900;				//以下报错2		//echo self::var2; //<b>Fatal error</b>:  Undefined class constant 'var2' in <b>PHPDocument2</b> on line <b>8</b><br />		self::dump();	}	function dump()	{		print_r($this);	}}$f = new father();$f->init();
Nach dem Login kopieren

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Benachrichtigungen in Laravel Benachrichtigungen in Laravel Mar 04, 2025 am 09:22 AM

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse PHP -Protokollierung: Best Practices für die PHP -Protokollanalyse Mar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

See all articles