search
HomeBackend DevelopmentPHP Tutorial求教!PHP面向对象学习

最近在学习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();

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

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

由于 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();

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
When would you use a trait versus an abstract class or interface in PHP?When would you use a trait versus an abstract class or interface in PHP?Apr 10, 2025 am 09:39 AM

In PHP, trait is suitable for situations where method reuse is required but not suitable for inheritance. 1) Trait allows multiplexing methods in classes to avoid multiple inheritance complexity. 2) When using trait, you need to pay attention to method conflicts, which can be resolved through the alternative and as keywords. 3) Overuse of trait should be avoided and its single responsibility should be maintained to optimize performance and improve code maintainability.

What is a Dependency Injection Container (DIC) and why use one in PHP?What is a Dependency Injection Container (DIC) and why use one in PHP?Apr 10, 2025 am 09:38 AM

Dependency Injection Container (DIC) is a tool that manages and provides object dependencies for use in PHP projects. The main benefits of DIC include: 1. Decoupling, making components independent, and the code is easy to maintain and test; 2. Flexibility, easy to replace or modify dependencies; 3. Testability, convenient for injecting mock objects for unit testing.

Explain the SPL SplFixedArray and its performance characteristics compared to regular PHP arrays.Explain the SPL SplFixedArray and its performance characteristics compared to regular PHP arrays.Apr 10, 2025 am 09:37 AM

SplFixedArray is a fixed-size array in PHP, suitable for scenarios where high performance and low memory usage are required. 1) It needs to specify the size when creating to avoid the overhead caused by dynamic adjustment. 2) Based on C language array, directly operates memory and fast access speed. 3) Suitable for large-scale data processing and memory-sensitive environments, but it needs to be used with caution because its size is fixed.

How does PHP handle file uploads securely?How does PHP handle file uploads securely?Apr 10, 2025 am 09:37 AM

PHP handles file uploads through the $\_FILES variable. The methods to ensure security include: 1. Check upload errors, 2. Verify file type and size, 3. Prevent file overwriting, 4. Move files to a permanent storage location.

What is the Null Coalescing Operator (??) and Null Coalescing Assignment Operator (??=)?What is the Null Coalescing Operator (??) and Null Coalescing Assignment Operator (??=)?Apr 10, 2025 am 09:33 AM

In JavaScript, you can use NullCoalescingOperator(??) and NullCoalescingAssignmentOperator(??=). 1.??Returns the first non-null or non-undefined operand. 2.??= Assign the variable to the value of the right operand, but only if the variable is null or undefined. These operators simplify code logic, improve readability and performance.

What is Content Security Policy (CSP) header and why is it important?What is Content Security Policy (CSP) header and why is it important?Apr 09, 2025 am 12:10 AM

CSP is important because it can prevent XSS attacks and limit resource loading, improving website security. 1.CSP is part of HTTP response headers, limiting malicious behavior through strict policies. 2. The basic usage is to only allow loading resources from the same origin. 3. Advanced usage can set more fine-grained strategies, such as allowing specific domain names to load scripts and styles. 4. Use Content-Security-Policy-Report-Only header to debug and optimize CSP policies.

What are HTTP request methods (GET, POST, PUT, DELETE, etc.) and when should each be used?What are HTTP request methods (GET, POST, PUT, DELETE, etc.) and when should each be used?Apr 09, 2025 am 12:09 AM

HTTP request methods include GET, POST, PUT and DELETE, which are used to obtain, submit, update and delete resources respectively. 1. The GET method is used to obtain resources and is suitable for read operations. 2. The POST method is used to submit data and is often used to create new resources. 3. The PUT method is used to update resources and is suitable for complete updates. 4. The DELETE method is used to delete resources and is suitable for deletion operations.

What is HTTPS and why is it crucial for web applications?What is HTTPS and why is it crucial for web applications?Apr 09, 2025 am 12:08 AM

HTTPS is a protocol that adds a security layer on the basis of HTTP, which mainly protects user privacy and data security through encrypted data. Its working principles include TLS handshake, certificate verification and encrypted communication. When implementing HTTPS, you need to pay attention to certificate management, performance impact and mixed content issues.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use