عرض declaration من مجلّد الملف فقط، وليس من المشروع كاملا phpstorm

ZaFaR97 • منذ 6 سنوات

السلام عليكم

استعمل برنامج Phpstorm

وأريد تحديد الـ declaration التي يتم عرضها عن الضغط على أي دالة  أو متغير. بحيث يوصلك لمحلّ تعريفها.

 

لدي بعض الدوال متشابه، في مجلدات مختلفة، وهي في مشروع واحد.

وعند الضغط على الدالة يقوم بإظهار لستة من الملفات التي تم تعريف الدالة فيها، للاختيار

وأريد أن يتم حصر هذه القائمة فقط بالمجلد الذي يحتوي على ملف الـ php

جربت عمل Exclusion، لكن هذا لن يكون عمليًا عن وجود أكثر من مجلد في المشروع الواحد تتكر به الدوال!

كلمات دليلية:

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (3)

Ali Majrashi • منذ 6 سنوات

وعليكم السلام والرحمه 

اتمنى اني فهمتك انت تحب لما تضغط على اسم الداله او الكلاس يوديك لاصلها في phpstorm انا في جهاز الماك استخدم

زر cmd مع الضغط على اسم الداله او الكلاس يوديني لها 

اتوقع يقابلها في الويندوز زر Ctrl جرب وعطني اش يطلع معك

اما اذا تحب تعرف مكان استخدام كود او كلمه تقدر تحدد الكلمة وتضغط cmd + shift + F اتوقع بالويندوز يقابلها ctrl + shift + f ومنها تطلع لك خيارات بحث تحدها بالمشروع بمجلد بالي تبي لفرز النتائج

ZaFaR97 • منذ 6 سنوات
3 ساعات مضت, Ali Majrashi said:

وعليكم السلام والرحمه 

اتمنى اني فهمتك انت تحب لما تضغط على اسم الداله او الكلاس يوديك لاصلها في phpstorm انا في جهاز الماك استخدم

زر cmd مع الضغط على اسم الداله او الكلاس يوديني لها 

اتوقع يقابلها في الويندوز زر Ctrl جرب وعطني اش يطلع معك

اما اذا تحب تعرف مكان استخدام كود او كلمه تقدر تحدد الكلمة وتضغط cmd + shift + F اتوقع بالويندوز يقابلها ctrl + shift + f ومنها تطلع لك خيارات بحث تحدها بالمشروع بمجلد بالي تبي لفرز النتائج

هي شغالة تمام، بس الإشكالية كالتالي:
 

لدي مجلد: مشروعـ1. فيه مجلّد سين، فيه ملف sen.php

ولدي في نفس مشروعـ1. مجلد صاد، فيه ملف sad.php

ولدي في نفس مشروعـ1. مجلد عين، فيه ملف aen.php  + ملف sos.php

 

الآن هناك دالة اسمها - Foo- الدالة هذه معرّفة في ملف sen و sad و aen > تمام ؟

الآن أنا في ملف sos.php : قمت بإستدعاء دالة Foo بشكل سليم.

أنا أريد أن أنتقل إلى أصل دالة Foo. اضغط عليها مع CTRL، بشكل افتراضي: المفترض أن يقوم Phpstorm بإيصالي إلى محل تعريفها. في ملف aen.php

لكن ما يقوم به فعليا هو البحث عن الدالة في جميع مجلدات المشروعـ1. ويظهر لي عدّة خيارات: sen / sad / aen ، في كل مرة اريد الوصول لأصل الدالة.

ما اريدهُ هو: حجب المجلدات الأخرى، وجعله يقرأ الدوال التي هي داخل مجلد عين فقط. بحيث عند الضغط يوصلني مباشرة لأصل الدالة في ملف aen تلقائيا دون الحاجة للإخيار من بين عدة مسارات.

- أحد الحلول: كان Mark as exclusion للمجلدات الأخرى، بالتالي لن يتعرف إليها ولن تتداخل مع المجلد الحاليّ، لكن في حالة أن لدي العشرات من المجلدات، سيكون الأمر صعبٌ قليلًا، لهذا أبحث عن حل يختصر الطريق ويحصر العملية داخل المجلد الوالحد.

- الآخر: أن أعمل على كل ملف في نافذة منفصلة ( وكأنها مشروع project ) منفصل.

 

* أعلم أن هذا ناتِج عن سوء ترتيب وتنظيم، لكن الصدق ما فيني حيل أجيب مسميات جديدة للدوال، وأكثرها نسخ لصق من بعض مع بعض التعديلات.

Ali Majrashi • منذ 6 سنوات

الحين عرفت اش تقصد سويت مشروع بنفس طريقة الملفات الي تقصدها 

انت مشكلتك انك ماتستخدم اسماء مختلفه وخاصه ان شكل ملفاتك كلها بمجلد واحد والي واضح لي من وصفك انك ماتستخدم اساليب توزيع اكواد مشروعك بالطريقه الصحيحه اذا كنت تستخدم مسميات متشابهة وهذا عادي ولكن يفضل تستخدمهم داخل Namespace بحيث تقدر توزع مشروعك داخلها ولكل مجلد تحط Namespace بحيث ان phpstrom وغيره يعرف يفرق لما تستدعي داله من الملف المحدد هل تقصد الداله في ملف sen او sad 

انا زبطت مشروع مبسط عشان اوضح طريقة استخدام namespaces حتى ان phpstorm لو تضغط على اسم الداله يوديك لملفها الصحيح 

مجلد مشروع يحتوي على الملفات التاليه

  • sen.php
  • sad.php
  • index.php

عملت ملف اسمه sen.php وهذا محتواه


<?php

namespace App\Sen;

function hello()
{
    return 'hello world from sen';
}

لاحظ باعلى الملف سمينا الملف داخل namespace نقدر نقول انت جالس تعطيه مسار افتراضي للمف هذا بحيث لما تستدعيه او تستخدمه تعرف وين المصدر باستخدام namespace

بعدها عمل ملف ثاني باسم sad.php


<?php

namespace App\Sad;

function hello()
{
    return 'hello world from sad';
}

زي ماانت شايف ملفين وداخلهم نفس الداله ولكن الفرق هو namespace مع ان كل الملفين بنفس المجلد 

وعملت ملف index.php وهذا محتواه لجلب الملف وتحديد الداله الصحيحه باستخدام namespace هذا محتواه 


<?php

require_once('sen.php');

use App\Sen;

var_dump(Sen\hello());

هنا لو تضغط على زر cmd + تضغط على الداله راح يوديك الملف الصحيح مكان تعريفها الصح

ونقدر نستدعي الداله مباشره باستخدام use function اذا كنت ماتحب تستخدم اسم Namespace قدام الداله مع انه هذا افيد اذا بتستخدم دوال لها وظائف مختلفه ولكن مسميات متشابهة داخل الملف 

هنا كود يجيب لك الداله مباشره 


<?php

require_once('sad.php');

use function App\Sad\hello;

var_dump(hello());

لاحظ استخدمنا use function وحددنا اسم الداله مباشره لاستخدامها داخل الملف index.php ونفس الشي لما تضغط اسم الداله مع زر cmd او الي يقابله في الويندوز راح يوديك للملف الصحيح 

الحل الثاني اذا ماكنت تحب تستخدم namespace لترتيب مجلدات وملفات مشروعك تقدر تحط ملف function داخل مجلد وتطلبه بحيث انك توزع ملفات مشروعك داخل مجلدات وتضمن ان مافيه ملفين داخلهم داله او كلاس بنفس الاسم تحت مجلد واحد 

هنا مثال لملف  index.php


<?php

require_once('folder/aen.php');

var_dump(hello());

 

لاحظ حطينا ملف aen.php داخل مجلد ومافيه ملف ثاني يحتوي على نفس الداله تقدر تحط ملفات زي ماتحب بس اهم شي مايتكرر الاسم داخل المجلد هنا راح يعرف phpstorm اي داله انت تقصد بالضبط او استخدم namespace وهي الافضل 

 

في الختام الحل الي تحتاجه انت ترتيب ملفاتك داخل مجلدات بشكل سليم وصحيح وتتبع افضل الممارسات واستخدم namespace 

استخدامات namespace بحر بحد ذاته ورهيب وممتع ويحل مشاكل كثير تخيل تقدر بنفس الملف تحط اكثر من namespace وتعرف دوال وكلاسات لكل namespace وتستدعيهم زي ماتحب بحيث تعرف وانت تبرمج اش الكلاس او الداله الصحيحه وحتى المحررات تعتمد عليه وعلى ترتيب المجلدات عندك تعرف طريقة بناء المشروع 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !