পিএইচপি নেমস্পেস এবং "ব্যবহার"


120

নেমস্পেস এবং useবিবৃতি দিয়ে আমার কিছুটা সমস্যা হচ্ছে ।

আমি তিনটি ফাইল আছে: ShapeInterface.php, Shape.phpএবং Circle.php।

আমি আপেক্ষিক পথগুলি ব্যবহার করে এটি করার চেষ্টা করছি তাই আমি এটি সমস্ত ক্লাসে রেখেছি:

namespace Shape; 

আমার বৃত্ত শ্রেণিতে আমার নিম্নলিখিত রয়েছে:

namespace Shape;
//use Shape;
//use ShapeInterface;

include 'Shape.php';
include 'ShapeInterface.php';    

class Circle extends Shape implements ShapeInterface{ ....

আমি যদি includeবিবৃতি ব্যবহার করি তবে আমি কোনও ত্রুটি পাই না। যদি আমি প্রাপ্ত useবিবৃতিগুলি চেষ্টা করি:

মারাত্মক ত্রুটি: শ্রেণীর 'আকার \ আকৃতি' পাওয়া যাবে না / ব্যবহারকারী / শন / ডকুমেন্টস / ওয়ার্কস / সাইটস / ওয়ার্কস্পেস / শ্যাপ / সার্কেল.এফপি লাইন 8 এ

কেউ দয়া করে আমাকে এই বিষয়ে একটু গাইডেন্স দিতে পারেন?


এছাড়াও এই বিষয় সম্পর্কে - stackoverflow.com/questions/33341955/…
— পিটার

উত্তর:


169

useঅপারেটর ক্লাস, ইন্টারফেসগুলি বা অন্যান্য নামব্যবধান নামের alias লেখা দেবার জন্য নয়। বেশিরভাগ useবিবৃতি এমন একটি নেমস্পেস বা শ্রেণি নির্দেশ করে যা আপনি ছোট করতে চান:

use My\Full\Namespace;

সমান:

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

তাহলে useঅপারেটর একটি বর্গ বা ইন্টারফেস নামের সাথে ব্যবহার করা হয়, এটা নিম্নলিখিত ব্যবহার করা হয়:

// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;

// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;

useঅপারেটর সঙ্গে বিভ্রান্ত করা যাবে না হয় autoloading । একটি শ্রেণি includeঅটোলোডারের (যেমন প্রয়োজনের সাথে নিবন্ধ করে) অটলয়েড হয় (প্রয়োজনের জন্য অগ্রাহ্য করা হয় )spl_autoload_register ) )। একটি উপযুক্ত অটোলোডার বাস্তবায়ন দেখতে আপনি পিএসআর -4 পড়তে চাইতে পারেন ।


সুতরাং আমি যদি বুটস্ট্র্যাপ.পিএফ নামে আরেকটি ফাইল তৈরি করি এবং $ সার্কেল = নতুন সার্কেল () এর সাথে একটি অভ্যন্তরে একটি অটোলোডার স্থাপন করি; এটিতে সার্কেল.এফপি অন্তর্ভুক্ত রয়েছে তবে আমি একটি ত্রুটি পাচ্ছি: মারাত্মক ত্রুটি: লাইন /. / সার্কেল.এফপি উপর শ্রেণি 'শেপ' পাওয়া যায় নি Sha এটি সার্কেল.এফপি লোড করে তবে শেপ.এফপি লোড নয় বলে বৃত্তটি সংজ্ঞায়িত করা হয়েছে যেমন: শ্রেণি সার্কেল শেপ ইন্টেরফেসগুলি শেপ প্রয়োগগুলি প্রসারিত করে
— শান নর্থ্রপ

আমি যদি উপরের ক্লাসগুলি থেকে নেমস্পেসটি সরিয়ে ফেলি তবে অটোলোডার ভাল কাজ করে। তবে যখন আমার আকৃতি শ্রেণীর ইন্টারফেসে নেমস্পেস থাকবে তখন আমি উপরের ত্রুটিটি পাই
— শন নর্থ্রপ

1
একটি উদাহরণ দিতে একটি গিস্ট তৈরি । দুর্ভাগ্যক্রমে গিস্টগুলিতে সাবফোল্ডার থাকতে পারে না। বুটস্ট্র্যাপ.এফপি একটি ফোল্ডারে রাখুন এবং অন্যান্য শ্রেণিগুলি 'শেপ' নামের সাবফোল্ডারে রাখুন।
— cmbuckley

13

আপনি যদি নিজের কোডটিকে নাম স্থানগুলিতে অর্ডার করতে চান তবে কেবল কীওয়ার্ডটি ব্যবহার করুন namespace:

file1.php

namespace foo\bar;

File2.php এ

$obj = new \foo\bar\myObj();

আপনি ব্যবহার করতে পারেন use। যদি ফাইল 2 তে আপনি রাখেন

use foo\bar as mypath;

আপনি ফাইলের কোথাও mypathপরিবর্তে ব্যবহার barকরতে হবে:

$obj  = new mypath\myObj();

ব্যবহার use foo\bar;সমান use foo\bar as bar;।

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