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


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.