Back to Question Center
0

আধুনিক পিএইচপি মধ্যে এখনও Bitwise অপারেটর কি প্রাসঙ্গিক?            আধুনিক পিএইচপি-র মধ্যে এখনও বিট ওয়্যার অপারেটর কি প্রাসঙ্গিক? প্যাটার্নস & অনুশীলনগুলি ডিবাগিং & Semalt

1 answers:
বিটিভি অপারেটর এখনও কি আধুনিক পিএইচপি এর সাথে প্রাসঙ্গিক?

আপনারা অনেকেই এই শিরোনামটি পড়ে আপনার মাথা কেঁপে কেঁপে উঠছেন। "বিটভাত?"

এই প্রবন্ধে, আমরা কি বিটাইর অপারেটর দেখতে পাব, এবং তাদের ব্যবহার এখনও এই আধুনিক যুগে কম্পিউটিংয়ের ক্ষেত্রে প্রাসঙ্গিক কিনা।

আধুনিক পিএইচপি মধ্যে এখনও Bitwise অপারেটর কি প্রাসঙ্গিক?আধুনিক পিএইচপি-র মধ্যে এখনও বিট ওয়্যার অপারেটর কি প্রাসঙ্গিক?
প্যাটার্নস এবং অভ্যাসসমূহ ডিবাগিং এবং সেমিট

উদাহরণ ব্যবহার করুন কেস

বিট ওয়্যার অপারেটর এখানে তালিকাভুক্ত করা হয়েছে, তবে সত্যিই উদাহরণ উদাহরণস্বরূপ ড্রাইভ, আমরা শুধু এক উপর ফোকাস করব: bitwise এবং ( & )। একটি উদাহরণ এটি আমার জন্য ক্লিক করুন। তাই আমরা কি করব - সোজা একটি উদাহরণ মধ্যে ডুব

কল্পনা করুন আপনার একটি ওয়েবসাইট আছে যার উপর একটি নির্দিষ্ট ব্যবহারকারীর নির্দিষ্ট অনুমতি থাকতে পারে। উদাহরণস্বরূপ, সাইটপয়েন্টের মত একটি পত্রিকা:

  • একজন লেখক CRUD খসড়া, এবং তাদের প্রোফাইল সম্পাদনা করতে পারেন।
  • একটি সম্পাদক উপরে, সিআরআরডি ড্রাফ্টস এবং সমাপ্তি পোস্ট, এবং সিআরইউডিডিডিডের প্রোফাইলগুলি ছাড়াও।
  • একজন অ্যাডমিনিস্ট্রেটর, উপরে ছাড়াও, প্রশাসকের অনুমোদন যোগ করতে পারেন।

একটি ব্যবহারকারীর একাধিক অনুমতি থাকতে পারে, সেটি ব্যবহার করে ডেটাবেস এবং সিস্টেমের অনুমতিতে কয়েকটি উপায় রয়েছে।

ডাবল যোগদান করুন

ভূমিকা যোগ করুন, অনুমতি যোগ করুন, একটি যোগ টেবিলে ভূমিকা অনুমতি সংযুক্ত করুন, তারপর অন্য যোগ টেবিল তৈরি করুন এবং কিছু ব্যবহারকারীদের কিছু ভূমিকা আবদ্ধ।

এই পদ্ধতিটি চারটি অতিরিক্ত টেবিল তৈরি করে:

  • অনুমতি
  • ভূমিকা
  • অনুমতি <-> ভূমিকা
  • ভূমিকা <-> ব্যবহারকারী

ওভারহেডের বেশ কিছুটা। সেমলেট এইগুলি সম্পাদনা করতে বা কিছু ঘন ঘন দেখাবার তালিকাতে নিয়মিতভাবে তাদের অ্যাপ্লিকেশনে তালিকাভুক্ত করে। শুধুমাত্র ভারী ক্যাশে এই অ্যাপ্লিকেশনটি ভারী লোডের নিচে কাঁপানো থেকে রক্ষা করবে।

এক সুবিধা, যদিও, জটিল অনুমতিগুলির সাথে সত্যিই ভাল ভূমিকা নির্ধারণ করে, আপনি শুধুমাত্র ব্যবহারকারীদের ভূমিকা রাখতে পারেন এবং আপনি ভাল আছেন - এটা রাখে যে টেবিলে আলো এবং দ্রুত যোগদান করে

একা যোগদান করুন

অনুমতি যোগ করুন, একটি যোগ সারণি যোগ করুন, কিছু ব্যবহারকারীদের কিছু অনুমতি সংযুক্ত করুন

এই পদ্ধতিটি দুটি অতিরিক্ত টেবিল তৈরি করে:

  • অনুমতি
  • অনুমতি <-> ব্যবহারকারী

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

কলাম স্ট্যাম্পেড

প্রতিটি অনুমতির জন্য ব্যবহারকারী টেবিলের মধ্যে একটি কলাম যোগ করুন, তারপর "চালু" বা "বন্ধ" হিসাবে অনুমতি পরীক্ষা করার জন্য এটির একটি টিটিআইপ (মূলত একটি বুলিয়ান) করুন।

ব্যবহারকারীর জন্য সাময়িক অনুমতি তারপর কিছু ভালো কিছু দেখতে হবে:

     UPDATE `ব্যবহারকারী` SET` সম্পাদনা প্রফিট` = 1,` মুছুনফফাইল` = 0, `তৈরি করুন ড্যাফ্ট` = 1,` প্রকাশড্রাফ্ট` = 0.। । যেখানে `আইডি` = 5    

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

মিমাংসা, কারণ কলামের তালিকা, দূর থেকে তাকালে, একটি বাইনারি সংখ্যা (1010) মত, এই পদ্ধতিটি অন্য একটি চমৎকার segway হয় .

বিটিভির দৃষ্টিভঙ্গি

মিষ্টি আমরা এই পদ্ধতিতে গভীর ডুব, এর বাইনারি একটি ক্র্যাশ কোর্স আছে যাক

বাইনারি সংখ্যা

সকল কম্পিউটার বাইনারি হিসেবে তথ্য সংরক্ষণ করে: 0 বা 1. সুতরাং, 14 নম্বর আসলে আসলে সংরক্ষিত হয়: 1110. সুতরাং 1337 নম্বর মানে:

  • 1 x 7
  • + 3 x 10
  • + 3 x 100
  • + 1 x 1000

দশমিক পদ্ধতিতে প্রতিটি অঙ্ক মিলে যায় (ভিত্তি 10) 10 দ্বারা গুণিত হয়। প্রথমটি হল 1, পরেরটি 10, পরেরটি পরবর্তী 100, পরের 1000, ইত্যাদি।

বাইনারি ইন, বেস 2, তাই প্রতিটি সংখ্যা 2 দ্বারা সংখ্যাবৃদ্ধি হয়। সংখ্যা 1110 তাই হল:

  • 0 x 1
  • + 1 x 2
  • + 1 x 4
  • + 1 x 8

মিমি 2 + 4 + 8, যা 14 - commercial led light bulbs.

হ্যাঁ, এটি বাইনারি সংখ্যা দশমিক রূপে রূপান্তর করা সহজ।

সুতরাং যখন আমরা 1010 এর আগে আমাদের অনুমতির কলামগুলি দেখি, তখন এটি বাইনারি আকারের সংখ্যা 10 হিসাবেও দেখা যাবে। হুম, সম্ভবত আমরা এখানে কিছু সম্মুখের দিকে করছি।

যদি আমাদের 1010 টি অনুমতি থাকে, তবে দ্বিতীয় এবং চতুর্থ বিটটি সেট করা হয়, তবে প্রথম এবং তৃতীয়টি না (কারণ তারা 0)।

বাইনারি প্যারালাসে, আমরা আসলে বলতে চাই 0 এবং 2 য় বিট সেট করা হয় না, কারণ তারা 0 থেকে গণনা করা হয়, ঠিক যেমন অ্যারে। এটি কারণ তাদের ক্রমিক সংখ্যা (1 ম, দ্বিতীয়, তৃতীয়) তাদের exponent অনুরূপ। 0 তম বিট আসলে 2 এর 0 (2 ^ 0) ক্ষমতার 2 যা 1 সমান। 1 ম বিট 2 থেকে 1 (2 ^ 1) ক্ষমতার 2 যা 2। 2 সেকেন্ড 2 স্কোয়ার্ড (2 ^ 2) যা 4 এর সমান, ইত্যাদি। এই ভাবে মনে রাখা সব খুব সহজ।

সুতরাং কিভাবে এই আমাদের সাহায্য?

বিটিভির দৃষ্টিভঙ্গি

আচ্ছা, দূর থেকে অনুমতির মাধ্যমে আমরা একসাথে সব কলাম একটি একক বাইনারি সংখ্যা দিয়ে প্রতিনিধিত্ব করতে পারি। যদি আমরা একক বাইনারি সংখ্যা দিয়ে একসাথে সব কলামগুলি প্রতিনিধিত্ব করতে পারি, তাহলে আমরা দশম অনুবাদিত হলে একক পূর্ণসংখ্যা দিয়ে এটি প্রতিনিধিত্ব করতে পারি!

যদি আমরা একটি একক অনুমতি কলাম যা মূল্য 14 ধারণ করে থাকি, তবে আমরা এখনই জানি যে এটি আসলে 1110 , এবং আমরা জানি যে আমরা চার অনুমতির মধ্যে তিনটি আছে! কিন্তু 3 আমাদের 4 কি?

অনুমতি নিম্নলিখিত ম্যাপিং স্যাম্পল:

পরিবর্তন অনুমোদন প্রোফাইল তৈরি করুন প্রোফাইল সম্পাদনা করুন প্রফুল ডিলিট ড্রাফ্ট তৈরি করুন ড্রাফ্ট সম্পাদনা ড্রাফট ডিলিট ড্রাফট পাবলিশ সমাপ্তি সম্পাদনা শেষ ডেলিটি
512 256 128 64 32 16 8 4 2 1

বাইনারি সংখ্যা 1410 হয় 1110, কিন্তু বামে শূণ্যের সংখ্যা কোন ব্যাপার না, তাই আমরা টেবিলে অনুমতির সংখ্যা পৌঁছা পর্যন্ত আমরা প্যাড করতে পারি: 0000001110. এটি এখনও 14, শুধুমাত্র প্রতিনিধি উপরের সারণি থেকে অনুমতির সমস্ত ইন্টেন্ট এবং উদ্দেশ্যে, 0000001110 === 1110.

এই অনুযায়ী, আমরা দেখতে পারি যে 14 অনুমতির অ্যাকাউন্টটি অনুমতি আছে: DRAFT_DELETE , DRAFT_PUBLISH , এবং FINISHED_EDIT )। একটি বাস্তব বিশ্বের অনুমতি সেটআপ ঠিক প্রতিনিধিত্ব না, মঞ্জুর, কিন্তু এটি একটি উদাহরণ হিসাবে আমরা extrapolate করতে পারেন যে যদি 1111111111 একটি ছিল, তাদের সব অনুমতি (সম্ভবত একটি অ্যাডমিন ব্যবহারকারী) আছে দশমিকের মধ্যে, এটি 1023। তাই, 1023 অনুমতিতে কলামের মানচিত্রে কেউ যদি সমস্ত অনুমতির সাথে থাকে তবে

কিন্তু কিভাবে আমরা আমাদের কোড এই জন্য চেক করবে? অন্য কথায়, আমরা কীভাবে জানতে পারি যে কোন অনুমতির বিট সেট করা আছে বা না , বিশেষ করে যদি কোন সংখ্যা দশমিক হিসাবে সংরক্ষিত হয়, এবং বাইনারি না?

এটি বিট করে অপারেটরদের জন্য - বিশেষত একক এম্পারসেন্ড & , যা bitwise এবং নামেও পরিচিত।. আপনি কেবল তাদের মান পরিবর্তন করে অন্য বিটের জন্য পরীক্ষা করবেন: 256, 128, 64, 32, 16, 8, 4, 2, বা 1.


[ঐচ্ছিক] "আসুন টেকনিক্যাল পেতে" সাইড-নোট

এই বিভক্ত বিভাগটি ছেড়ে যদি আপনি জানতে চান না কিভাবে এই অপারেটর, বা অনুরূপ অপারেটর কাজ, কিন্তু উদাহরণ সঙ্গে চলতে আগ্রহী।

যখন আমরা বলি এবং 512 এবং অনুমতি আমরা অংশটি পরে দেখতে চাই এবং সত্য হতে পারি, কারণ এসকল প্রশ্নগুলি কাজ করে - তারা অবস্থার মূল্যায়ন করে এবং সেইসব সারিগুলি ফেরত দেয় যা প্রয়োজনীয়তা সম্পর্কে সত্যতা ফিরে পায় ।

অতএব, 512 এবং অনুমতি সত্যের মূল্যায়ন করতে হবে। আমরা জানি যে কোনও অ শূন্য মান, এটি একটি পূর্ণসংখ্যা, একটি বুলিয়ান যা "সত্য" বলে, বা একটি স্ট্রিং যা খালি না, আসলে "সত্য" হিসাবে বিবেচিত হয়। তাই 512 সত্য। 1 সত্য। 0 মিথ্যা। 128 সত্য। ইত্যাদি।

512 একটি বেস -10 পূর্ণসংখ্যা এবং অনুমতি একটি কলাম যা একটি বেস -10 পূর্ণসংখ্যা থাকতে পারে। bitwise এবং প্রকৃতপক্ষে এই দুটি সংখ্যার ক্রস-অংশ দেখায় এবং তাদের উভয়ের মধ্যে সেট করা বিট ফেরত দেয় । সুতরাং, যদি সংখ্যা 512 হয় 1000000000, এবং যদি অনুমতির মান 1023 হয়, যে 1111111111 এর বাইনারি রূপান্তরিত হয়। ঐ রিটার্নের ক্রস বিভাগ 1000000000 কারণ শুধুমাত্র বাম-বিট বিট উভয় সংখ্যার সেট করা হয়। যখন আমরা এই প্যাটার্নটিকে দশমিক রূপে রূপান্তর করি, যে 512 হয়, যা সত্য

মিমোল্ট আসলে একটি গাণিতিক অপারেটর নয়, যা লজিক্যাল লজিক্যাল। যদি আমরা 1110 এবং 1010 নম্বরে থাকি, তবে এখানে তারা বিট বিটওয়ার অপারেটরগুলি প্রদান করে যাচ্ছেন:

- এবং | ^ ~
অপারেন্ড এ 1110 1110 1110 1110
অপারেন্ড বি 1010 1010 1010 /
ফলাফল 1010 1110 0100 0001
  • একটি বাইনারি সংখ্যা ফেরত দেয় যা উভয় অপারেটরে সেট করা হয়।
  • | কোনও অপারেটরে সেট করা সমস্ত বিট সেট সহ একটি বাইনারি সংখ্যা ফেরত দেয়।
  • ^ একটি অপারেটরে একাধিক বিট সেট দিয়ে একটি বাইনারি সংখ্যা ফেরত দেয়, তবে উভয়ই নয়।
  • ~ বিপরীত দেয় - মূল অপারেন্ডে সেট না করা সমস্ত এখন সেট করা হয়।

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


পিএইচপি এবং আমরা একটি বিট ঠিক সেট করা হয় যদি পরীক্ষা করতে পারেন:

     যদি (1023 এবং 1) {}    

কিন্তু এই সত্যিই, পাঠযোগ্য ব্যাপার সত্যিই কঠিন - শুধু কাঁচা সংখ্যার দিকে তাকান সত্যিই পাঠযোগ্য বা বোধগম্য নয়। সুতরাং, পিএইচপি মধ্যে, এটি বিট হিসাবে অনুমতি সংজ্ঞায়িত সংহত ব্যবহার ভাল, এবং কলাম থেকে অনুমতি এর পূর্ণসংখ্যা মান আনার। তারপর, আপনি এই মত কিছু শেষ:

     যদি ($ ব্যবহারকারী-> অনুমতি & MyNamespace \ Role: FINISHED_DELETE) {//}    

এখানে আমরা অনুমান করি আমরা একটি \ MyNamespace \ Role শ্রেণী সংজ্ঞায়িত এবং এই ধরনের ধ্রুবক সঙ্গে লোড আছে:

     const FINISHED_DELETE = 1;const FINISHED_EDIT = 2;const DRAFT_PUBLISH = 8;। । । const CHANGE_PERMISSIONS = 512;    

মিমল্ট, আপনি অতিরিক্ত টেবিল ব্যবহার না করে এবং অকার্যকর ওভারহেড তৈরি ছাড়া প্রতি ব্যবহারকারী একাধিক অনুমতি সংরক্ষণ করার একটি সত্যিই সহজ উপায় পেয়েছেন. অতএব, তাদের অনুমতি সংরক্ষণ করার জন্য, আপনি কেবল তাদের সমষ্টি (1 + 2 = 3) এবং

অনুমতি কলামে 3 সংরক্ষণ করুন। বাইনারি সংমিশ্রনের সাথে 3 নম্বর পেতে অন্য কোনও উপায় নেই - 0011 এর চেয়ে অন্য কোন উপায়ে বাইনারিটিতে 3 নম্বরের প্রতিনিধিত্ব করা যায় না - যাতে আপনি 100% নিশ্চিত হতে পারেন যে সংখ্যা 3 সবসময় ব্যবহারকারীর মানে অনুমতি 1 এবং অনুমতি 2, ধ্রুবক তাদের মান অনুরূপ।

এই খুব সহজ এবং ব্যবহারিক মনে হয়, ঠিক? ধরা খাওয়া?

ক্যাভিয়াজ

সেমিট দুটি প্রধান বিবেক:

  1. পরবর্তী অনুমতির বিট মান গণনা করার সময় আপনাকে 2 এর ক্ষমতা ব্যবহার করতে মনে রাখতে হবে। তাই যদি আপনি একটি নতুন অনুমতি যোগ করার প্রয়োজন হয়, আপনি শুধু উইলি-নলি 543 চয়ন না করতে পারেন যদি আপনার ইতিমধ্যে 512 - এটি 1024 হতে হবে। এটি সংখ্যা আরো বড় পেতে হিসাবে সংখ্যা বড় পেতে হবে।
  2. যেহেতু আমাদের 64 বিট অপারেটিং সিস্টেমে 64 বিট অপারেটিং সিস্টেম চালানো হচ্ছে (বেশিরভাগই - এমনকি 32 বিট এখনও আটকে আছে!), এর মানে হল একটি সংখ্যা সর্বোচ্চ 64 বিট থাকতে পারে। এর মানে হল যে আপনি একটি প্রদত্ত ইউজারের সর্বাধিক 64 অনুমতির ক্রমাগত সংরক্ষণ করতে পারেন। ছোট থেকে মাঝারি সাইট জন্য এটি যথেষ্ট যথেষ্ট, কিন্তু প্রকাণ্ড ওয়েবসাইটে, এটি একটি সমস্যা পরিণত করতে পারেন। বিভিন্ন অনুমতি প্রসঙ্গে বিভিন্ন কলামের ব্যবহার সমাধান ( খসড়া প্রকাশন , অ্যাকাউন্ট_প্রিমিশন ইত্যাদি)। এই প্রতিটি কলামে তার নিজস্ব 64 অনুমতির permutations থাকতে পারে, যা এমনকি সবচেয়ে চাহিদা ওয়েবসাইটের জন্য যথেষ্ট।

উপসংহার

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

এখানে উপস্থাপন করা মিমোল্ট অবশ্যই কিছুটা সহজ করে তুলবে, কিন্তু শুধুমাত্র যদি আপনি উপরের উদাহরণের মত প্রদর্শিত এমনকি সহজ বিকল্প সম্পর্কে সচেতন না হন।

আপনি অনুমতি পাওয়ার জন্য bitwise অপারেটর ব্যবহার এবং এই পদ্ধতির সংরক্ষণের বিষয়ে কি মনে করেন? কোন সুস্পষ্ট পক্ষ / cons? আসুন আমরা জানি কিভাবে আপনি এটা করবেন, এবং কেন!

March 1, 2018