PHP Özet anahtar kelime

5 Cevap php

Hey, ben PHP ile oldukça tecrübeli değilim ama ben odaklı programlama nesne aşağı geldiğinde anahtar kelime soyut ne hiçbir fikrim yok. Herkes için kullanılabilir ne düz İngilizce açıklayabilir misiniz?

Ben hangi durumlarda soyut anahtar kelime kullanmak istiyorsunuz? Nasıl sınıf / arayüzünü değiştiriyor?

5 Cevap

(Hope this is simple enough -- I don't think I can do better ^^ )

Bir abstract class instanciated olamaz: yalnızca abstract sınıfından devralan başka bir sınıf oluşturmak ve bu alt sınıf instanciate olabilir.

Eğer abstract gibi bazı yöntemler beyan ve eğer, bu instanciable olması o biri için, çocuk sınıf tanımlanmış olmalıdır.

Bir sınıf özet bildirilmesi bu kullanılmak amacıyla sınıflandırma edilmesi gerektiği anlamına gelir. Bir soyut sınıf örneği olamaz. Bir (bir arayüz aksine) uygulama kod içerebilir uzun bir arayüz olarak görebilirsiniz.

Bir yöntem soyut bildirerek, sen yöntemini uygulamak için alt sınıfı zorlamak.

Soyut sınıflar gerçek bir a-kind-of-model ilişkisi için kullanılır. Bu, örneğin bir veritabanı sürücüsü Gerçek sürücü sınıfların yöntemleri için ortak bir temel sınıf, imzaları sağlamayı amaçlamaktadır hangi hiyerarşi, harita sağlar. Uygulama daha sonra gerçek sürücü sınıflarındaki önceden belirlenmiş imza uygun olarak gerçekleştirilir.

Burada kod örneği

<?php
abstract class AbstrakteKlasse {
  public abstract function methode();
}

class ImplementierendeKlasse extends AbstrakteKlasse {
  public function methode() {
    print "ImplementierendeKlasse::methode() aufgerufen.\n";
  }
}

$objekt = new ImplementierendeKlasse;
$objekt->methode();
?>

Bir soyut sınıf başlatamazsınız rağmen, türetilmiş sınıf için kullanılabilir olacak somut yöntemler / özellikler / değişkenleri (C #, AFAIK) ilan edebilir

class Program
    {
        static void Main(string[] args)
        {
            Dog a = new Dog();
           //concrete properties and methods in abstract base class 
          //are available to derived class
            a.Name = "SuperDog";
            a.EatFood();
            //And now calling Dog's method
            a.Speak();            
            Console.WriteLine(a.GetType());

        }
    }

    public abstract class Animal
    {
        public string Name { get; set; }
        public void EatFood()
        {
            Console.WriteLine("Eating..");
        }
    }

    public class Dog :Animal
    {
        public void Speak()
        {
            Console.WriteLine("Bow .. Bow");
        }
    }

Tanımı şimdi ben size bir örnek vermek için çalışacağız, yukarıda söz edilir:

"abstract" ensures that you follow a specific logic, e.g. a ticket's material is ALWAYS "paper", or a creditcare must always have a "code". This is important if you work in a big company which has strict standardisation or if you want to 'force' your developers to follow a specific structure, so their code won't end up in a mess.

    abstract class ticket{

    public function material()
    {
    	return 'Paper';
    }

}

abstract class creditcard{

    public function material()
    {
    	return 'Plastic';
    }

    abstract function setCode(); // the ";" semicolon is important otherwise it will cause an error

}

class key extends ticket{

    public function getMaterial()
    {
    	return parent::material();
    }
}

class anotherKey extends creditcard{

    public function setCode($code)
    {
    	$this->code = $code;
    }
}

Biz "setCode" yöntemini tanımlamak yoksa ayrıştırıcı "new anotherKey" bir hata döndürecektir