PHP5中实现多态的两种方法实例分享_php实例
在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。
我们只能说在PHP5中,多态应用在方法参数的类型提示位置。
一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。
所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。
简单的说,一个类拥有其父类、和已实现接口的身份。
通过实现接口实现多态
interface User{ // User接口
public function getName();
public function setName($_name);
}
class NormalUser implements User { // 实现接口的类.
private $name;
public function getName(){
return $this->name;
}
public function setName($_name){
$this->name = $_name;
}
}
class UserAdmin{ //操作.
public static function ChangeUserName(User $_user,$_userName){
$_user->setName($_userName);
}
}
$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.
echo $normalUser->getName();
?>
使用接口与组合模拟多继承
通过组合模拟多重继承。
在PHP中不支持多重继承,如果我们向使用多个类的方法而实现代码重用有什么办法么?
那就是组合。在一个类中去将另外一个类设置成属性。
下面的例子,模拟了多重继承。
接口实例
写一个概念性的例子。 我们设计一个在线销售系统,用户部分设计如下: 将用户分为,NormalUser, VipUser, InnerUser 三种。要求根据用户的不同折扣计算用户购买产品的价格。并要求为以后扩展和维护预留空间。
interface User
{
public function getName();
public function setName($_name);
public function getDiscount();
}
abstract class AbstractUser implements User
{
private $name = "";
protected $discount = 0;
protected $grade = "";
function __construct($_name) {
$this->setName($_name);
}
function getName() {
return $this->name;
}
function setName($_name) {
$this->name = $_name;
}
function getDiscount() {
return $this->discount;
}
function getGrade() {
return $this->grade;
}
}
class NormalUser extends AbstractUser
{
protected $discount = 1.0;
protected $grade = "Normal";
}
class VipUser extends AbstractUser
{
protected $discount = 0.8;
protected $grade = "VipUser";
}
class InnerUser extends AbstractUser
{
protected $discount = 0.7;
protected $grade = "InnerUser";
}
interface Product
{
function getProductName();
function getProductPrice();
}
interface Book extends Product
{
function getAuthor();
}
class BookOnline implements Book
{
private $productName;
protected $productPrice;
protected $Author;
function __construct($_bookName) {
$this->productName = $_bookName;
}
function getProductName() {
return $this->productName;
}
function getProductPrice() {
$this->productPrice = 100;
return $this->productPrice;
}
public function getAuthor() {
$this->Author = "chenfei";
return $this->Author;
}
}
class Productsettle
{
public static function finalPrice(User $_user, Product $_product, $number) {
$price = $_user->getDiscount() * $_product->getProductPrice() * $number;
return $price;
}
}
$number = 10;
$book = new BookOnline("设计模式");
$user = new NormalUser("tom");
$price = Productsettle::finalPrice($user, $book, $number);
$str = "您好,尊敬的" . $user->getName() . "
";
$str .= "您的级别是" . $user->getGrade() . "
";
$str .= "您的折扣是" . $user->getDiscount() . "
";
$str .= "您的价格是" . $price;
echo $str;
?>

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

가상 기본 클래스는 추가 vtable을 생성하지 않고도 여러 기본 클래스에서 상속을 허용하여 vtable 메모리 오버헤드를 최적화합니다. 최적화된 코드에서 모양 기본 클래스에는 더 이상 가상 함수 테이블이 없으며 원 및 직사각형 클래스는 동일한 가상 함수 테이블을 공유하므로 메모리 소비가 줄어듭니다.

php5에서 포트 80을 변경하는 방법: 1. Apache 서버 구성 파일에서 포트 번호를 편집합니다. 2. PHP가 새 포트에서 작동하도록 PHP 구성 파일을 편집합니다. 3. Apache 서버를 다시 시작하면 PHP 응용 프로그램이 실행됩니다. 새 포트에서 실행을 시작합니다.

MySQL에서 데이터의 다형성 저장 및 다차원 쿼리를 구현하는 방법은 무엇입니까? 실제 애플리케이션 개발에서 데이터의 다형성 저장 및 다차원 쿼리는 매우 일반적인 요구 사항입니다. 일반적으로 사용되는 관계형 데이터베이스 관리 시스템인 MySQL은 다형성 스토리지 및 다차원 쿼리를 구현하는 다양한 방법을 제공합니다. 이 기사에서는 MySQL을 사용하여 데이터의 다형성 저장 및 다차원 쿼리를 구현하는 방법을 소개하고 해당 코드 예제를 제공하여 독자가 이를 빠르게 이해하고 사용할 수 있도록 돕습니다. 1. 다형성 스토리지(Polymorphic Storage) 다형성 스토리지는 동일한 분야에 서로 다른 유형의 데이터를 저장하는 기술을 말합니다.

다형성과 상속을 사용하여 PHP에서 데이터 유형을 처리하는 방법 소개: PHP에서 다형성과 상속은 두 가지 중요한 객체 지향 프로그래밍(OOP) 개념입니다. 다형성과 상속을 사용하면 다양한 데이터 유형을 보다 유연하게 처리할 수 있습니다. 이 기사에서는 다형성과 상속을 사용하여 PHP에서 데이터 유형을 처리하는 방법을 소개하고 코드 예제를 통해 실제 적용 방법을 보여줍니다. 1. 상속의 기본 개념 상속은 객체지향 프로그래밍에서 중요한 개념으로, 부모 클래스의 속성과 메서드를 상속받을 수 있는 클래스를 생성할 수 있게 해줍니다.

PHP는 PHP5부터 객체지향 프로그래밍(OOP)을 지원하는 서버측 프로그래밍 언어입니다. OOP의 핵심 아이디어는 데이터와 동작을 객체에 캡슐화하여 프로그램의 유지 관리성과 확장성을 향상시키는 것입니다. PHP에서 객체 지향 프로그래밍에는 상속, 다형성 및 인터페이스라는 세 가지 주요 특성이 있습니다. 1. 상속 상속이란 클래스가 다른 클래스로부터 속성과 메서드를 상속받을 수 있다는 것을 의미합니다. 상속된 클래스를 부모 클래스 또는 기본 클래스라고 하며, 상속된 클래스를 하위 클래스 또는 파생 클래스라고 합니다. 하위 클래스는 상속을 통해 상위 클래스의 속성과 메서드를 얻을 수 있습니다.

객체 지향 프로그래밍이란 무엇입니까? 객체 지향 프로그래밍(OOP)은 실제 엔터티를 클래스로 추상화하고 객체를 사용하여 이러한 엔터티를 나타내는 프로그래밍 패러다임입니다. 클래스는 객체의 속성과 동작을 정의하고, 객체는 클래스를 인스턴스화합니다. OOP의 가장 큰 장점은 코드를 더 쉽게 이해하고 유지 관리하며 재사용할 수 있다는 것입니다. OOP의 기본 개념 OOP의 주요 개념에는 클래스, 개체, 속성 및 메서드가 포함됩니다. 클래스는 객체의 속성과 동작을 정의하는 객체의 청사진입니다. 객체는 클래스의 인스턴스이며 클래스의 모든 속성과 동작을 갖습니다. 속성은 데이터를 저장할 수 있는 개체의 특성입니다. 메소드는 객체의 데이터에 대해 작동할 수 있는 객체의 함수입니다. OOP의 장점 OOP의 주요 장점은 다음과 같습니다. 재사용성: OOP는 코드를 더 많이 만들 수 있습니다.

php5가 포트 9000을 수신하지 않는 경우의 해결 단계: 1. PHP-FPM 구성 파일을 확인합니다. 2. PHP-FPM 서비스를 다시 시작합니다. 3. 방화벽을 끄거나 포트 전달을 구성합니다. 4. 다른 프로세스가 포트 9000을 사용하는지 확인합니다.
