PHP JAVA ve C# Inheritance Yapısı

by admin on Eylül 22, 2010

Şöyle bir durum var. A diye bir sınıfım var.Bu A sınıfı B den miras alıyor.Peki A objesi oluşturulduğunda hangisinin constructor ı önce çalışacak.OOP yi az buçuk bilen bir kişi önce parent(B) sonra (A) nın constructorları çalışacak diyebilir.

Şimdi 3 örnek kod inceleyelim.PHP ve Java ve ASP.NET te ne gibi tepkiler veriyor. Java

public class Sinif1 extends Sinif2 {

    public Sinif1()
    {
        System.out.println("Sınıf1 constructor çalıştı");
    }
    public static void main(String[] args) {
        Sinif1 a = new Sinif1();
    }

}

public class Sinif2 {
    public Sinif2()
    {
        System.out.println("Sinif2 constructor çalıştı");
    }
}

Ekran çıktısı şu olacaktır:

Sinif2 constructor çalıştı
Sınıf1 constructor çalıştı

.NET Örneği

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class Sinif2
    {
        public Sinif2()
        {
            Console.WriteLine("Base constructor çalıştı");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Sinif1 : Sinif2
    {
        public Sinif1()
        {
            Console.WriteLine("Inherited ctor çalıştı");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Sinif1 cls = new Sinif1();
            Console.ReadLine();
        }
    }
}

Ekran Çıktısı :

Base constructor çalıştı.
Inherited ctos çalıştı.

şekinde olacaktır.

PHP örneğinde ise

<?php
  class Sinif2
  {
    function __construct()
    {
      echo "Sinif2 constructor calisti.
";
    } 

  }

  class Sinif1 extends Sinif2
  {
    function __construct()
    {

      echo "Sinif1 constructor calisti.
";
    }
  } 

  $x = new Sinif1();

Ekran çıktısı şu şekilde oluyor:

Sinif1 constructor calisti.

Eğer üst sınıftaki constructor veya destructor ı çalıştırmak istiyorsanız. Mesela ilk olarak parent constructor çalışmasını istiyorsanız

  class Sinif1 extends Sinif2
  {
    function __construct()
    {

      parent:__construct();
    }
  }

Şeklinde kullanmalısınız.

2 comments

ASP.NET bir dille yazılır (C#, VB v.s.). Dolayısıyla PHP, C# ve JAVA nın inheritance(miras alma) yapısı olmalı başlık. (BENCE!!!)

by Cem on 02 Ekim 2010 at 16:19. Cevapla #

Gerçekten doğru söylüyorsun. Düzeltme için teşekkürler.

by Mustafa İleri on 05 Ekim 2010 at 13:52. Cevapla #

Leave your comment

Required.

Required. Not published.

If you have one.