কোনও শ্রেণি উভয় শ্রেণি প্রসারিত করতে পারে এবং একটি ইন্টারফেস প্রয়োগ করতে পারে


102

কোনও শ্রেণি পিএইচপি-তে একটি ইন্টারফেস এবং অন্য শ্রেণি উভয়ই প্রসারিত করতে পারে?
মূলত আমি এটি করতে চাই:

interface databaseInterface{
 public function query($q);
 public function escape($s);
 //more methods
}

class database{ //extends both mysqli and implements databaseInterface
 //etc.
}

কেউ কীভাবে এটি করবে, সহজভাবে:

class database implements databaseInterface extends mysqli{ 

মারাত্মক ত্রুটির ফলাফল:

পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত T_EXTENDS, লাইনে * লাইন * এ * ফাইল * -তে '{' আশা করা হচ্ছে

18
কীভাবে এটি খুব স্থানীয়করণ হয় ?! "এই প্রশ্নটি ভবিষ্যতের কোনও দর্শকদের সহায়তা করার সম্ভাবনা কম"। তবুও সর্বোত্তম উত্তরে ৩৩ টি আপভোট এবং প্রশ্নটি রয়েছে 4 তারা!
দ্বৈততা_

উত্তর:


181

এটি অন্যভাবে চেষ্টা করুন:

class database extends mysqli implements databaseInterface { ...}

এই কাজ করা উচিত.


আহ্, আপনাকে অনেক ধন্যবাদ কেন তাদের চারপাশে অন্যভাবে হওয়া উচিত?
পিম জ্যাজার 21

14
যেহেতু আপনি কেবলমাত্র একটি শ্রেণির উত্তরাধিকারী হতে পারেন এবং আপনি যে কোনও সংখ্যক ইন্টারফেস প্রয়োগ করতে পারেন, এটি সম্ভবত একটি সিনট্যাক্স চিনির জিনিস ছিল। এছাড়াও, মনে রাখবেন, যদি আপনার সাবক্লাস কোনও ইন্টারফেস প্রয়োগ করে, তবে এটি বাস্তবায়িত পদ্ধতির তালিকায়ও প্রদর্শিত হবে। সুতরাং তাদের সেই ক্রমে স্থাপন করা নির্দিষ্ট অর্থবোধ করে।
ড্রয়

এটা কি খারাপ অভ্যাস?
shmshd

23

বনভ. আপনার কেবল সঠিক ক্রম ধরে রাখা দরকার।

class database extends mysqli implements databaseInterface { ... }

তদুপরি, একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়ন করতে পারে। কমা দিয়ে কেবল তাদের আলাদা করুন।

যাইহোক, আমি আপনাকে সতর্ক করতে বাধ্য হতে পারি যে মাইএসকিলি ক্লাস প্রসারিত করা অবিশ্বাস্যভাবে খারাপ ধারণা । প্রতি সেয়ার উত্তরাধিকার হ'ল অবজেক্ট অরিয়েন্টেড প্রোগ্রামিংয়ে সম্ভবত সবচেয়ে বেশি ওভাররেটেড এবং অপব্যবহার করা ধারণা।

পরিবর্তে আমি ডিবি সম্পর্কিত জিনিসগুলি মাইএসকিলি উপায় (বা পিডিও উপায়) করার পরামর্শ দেব।

প্লাস, একটি ছোটখাটো জিনিস, তবে নামকরণের সম্মেলনগুলি গুরুত্বপূর্ণ matter আপনার ক্লাসটি databaseতখন আরও সাধারণ বলে মনে হচ্ছে mysqli, সুতরাং এটি প্রস্তাব দেয় যে উত্তরোত্তর উত্তরাধিকার সূত্রে প্রাপ্ত databaseনয় কাছাকাছি।


4
কেন মাইসকিলি ক্লাস বাড়ানো খারাপ ধারণা?
পিম জাগার 21

11
প্রথম, কারণ এটি আপনার নয়। যখন মাইসকিলি ছেলেরা কিছু সাবক্লাসের আচরণ পরিবর্তন করার সিদ্ধান্ত নেয়। দ্বিতীয়ত, উত্তরাধিকার বিশেষ কার্যক্ষমতার জন্য ব্যবহৃত হয়, অতিরিক্ত কার্যকারিতার সাথে বাড়ানো হয় না। এটি ওওপি-র মধ্যে সবচেয়ে ভুল বোঝাবুঝি। থাম্বের নিয়ম হিসাবে আমি কেবল বিমূর্ত ক্লাসগুলি প্রসারিত করি।
মিশা রুডনিকি

মিশাল - একটি বিকাশকারী যারা একীভূত / রচিত বনাম বহুবর্ষক পদ্ধতির ব্যবহার করেন তাদের জন্য কীভাবে মাইসকিলে পরিবর্তন হবে? পরিবর্তনগুলি পরিচালনা করতে আপনাকে এখনও আপনার কোড আপডেট করতে হবে।
পিটার বেইলি

4
আমি অ্যাডাপ্টারের প্যাটার্নের সাথে পরিচিত। আমি কেবল বলছি যে যদি কোনও পদ্ধতির নাম পরিবর্তন হয় বা অবহেলিত হয় তবে আপনাকে এখনও উভয় পরিস্থিতিতে কোড পরিবর্তন করতে হবে। যদিও আমি একমত যে এই দৃশ্যে একটি নন-পলিমারফিক কৌশলটি আরও ভাল, আমি কোনও অ্যাডাপ্টারের পরিবর্তনের জন্য "প্রতিরোধ ক্ষমতা" হতে হবে এই ধারণাটি আমি কিনে নিই না।
পিটার বেইলি

4
আপনাকে কেবল অ্যাডাপ্টার কোড পরিবর্তন করতে হবে, সেই কোডটি ব্যবহার করে সমস্ত স্থান নয়। রচনা দিয়ে আপনি সামঞ্জস্যতা স্তরটি যে কোনও বিষয়ই সরবরাহ করতে পারেন, যদিও উত্তরাধিকারের সাথে আপনি এটিকে সর্বোত্তমভাবে একটি হ্যাক বলতে পারেন। এবং, আমি সংশোধন করে দাঁড়িয়েছি, অ্যাডাপ্টার পরিবর্তনের জন্য আরও ভাল রোগ প্রতিরোধ ক্ষমতা সরবরাহ করবে।
মিশা রুডনিকি

8

হ্যাঁ, আপনি যদি একাধিক ইন্টারফেস বাস্তবায়ন করতে চান তবে আপনি এটি করতে পারেন:

public class MyClass extends BaseClass implements myInterface1, myInterface2, myInterface3{ 

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.