Мой ответ несколько отличается в подходе, но включает в себя многие из приведенных здесь ответов. Я бы рекомендовал многопростовый подход:
defined('_SOMECONSTANT') or die('Hackers! Be gone!');
ОДНАКО defined or die
подход имеет ряд недостатков. Во-первых, это настоящая боль в предположениях для тестирования и отладки. Во-вторых, это связано с ужасающим, умопомрачительно скучным рефакторингом, если вы передумаете. "Найти и заменить!" ты говоришь. Да, но насколько ты уверен, что все написано точно так же везде, хммм? Теперь умножьте это на тысячи файлов ... o.O
И тогда есть .htaccess. Что произойдет, если ваш код будет распространен на сайтах, где администратор не так скрупулезен? Если вы полагаетесь только на .htaccess для защиты ваших файлов, вам также понадобится: a) резервная копия, b) ящик тканей для высыхания ваших слез, c) огнетушитель, чтобы погасить огонь во всей ленте от людей используя ваш код.
Итак, я знаю, что вопрос задает «самый простой», но я думаю, что это требует более «защитного кодирования».
Я предлагаю:
require('ifyoulieyougonnadie.php');
(не include()
и в качестве замены для defined or die
) ifyoulieyougonnadie.php
выполните некоторые логические действия - проверьте различные константы, вызывающий скрипт, локальное тестирование и т. д., а затем реализовать ваш die(), throw new Exception, 403
и т. д. Я создаю свою собственную фреймворк с двумя возможными точками входа - основной index.php (инфраструктура Joomla) и ajaxrouter.php (моя фреймворк) - поэтому в зависимости от точки входа я проверяю разные вещи. Если запрос на ifyoulieyougonnadie.php
не поступает из одного из этих двух файлов, я знаю, что принимаются махинации! Но что, если я добавлю новую точку входа? Не беспокойся. Я просто изменяю ifyoulieyougonnadie.php
, и меня сортируют, а также нет «найти и заменить». Ура! Что делать, если я решил переместить некоторые мои скрипты, чтобы создать другую структуру, которая не имеет одинаковых констант defined()
? ... Ура! ^ _ ^ Я нашел, что эта стратегия делает разработку намного веселее и намного меньше:
/**
* Hmmm... why is my netbeans debugger only showing a blank white page
* for this script (that is being tested outside the framework)?
* Later... I just don't understand why my code is not working...
* Much later... There are no error messages or anything!
* Why is it not working!?!
* I HATE PHP!!!
*
* Scroll back to the top of my 100s of lines of code...
* U_U
*
* Sorry PHP. I didn't mean what I said. I was just upset.
*/
// defined('_JEXEC') or die();
class perfectlyWorkingCode {}
perfectlyWorkingCode::nowDoingStuffBecauseIRememberedToCommentOutTheDie();
Хороший вопрос! Editor API docs
объясняет это, но информация в основном разбросана, поэтому я подведу итог:
Для начала, есть опция CanEditMultipleObjects
, которую вы в настоящее время используете. не используется. Цитата из документов:
Если этот подход используется, пользователь может выбрать несколько активов в окне иерархии и изменить значения для всех них одновременно.
blockquote>Для базового примера этого выберите два
GameObjects
в вашей сцене, которые имеют одинаковый компонент Unity (например,Image
илиRigidbody
), и вы сможете изменять эти компоненты на в то же время, чтобы иметь одинаковые значения. Большинство встроенных компонентов поддерживают его.Это первое преимущество использования
serializedObject
; он поддерживает редактирование нескольких объектов, аEditor.target
- нет (для этого вам понадобитсяEditor.targets
). Так что теперь, если вам интересно, « почему бы мне просто не использоватьEditor.targets
для многообъектного редактирования? », рассмотрите эту цитату из документов:Вместо Для непосредственного изменения переменных сценария выгодно использовать системы SerializedObject и SerializedProperty для их редактирования, поскольку это автоматически обрабатывает многообъектное редактирование, отмену и переопределение Prefab . blockquote>
Суть этого сводится к тому, что если вы не хотите, чтобы функции отмены, переопределения и автоматического редактирования мультиобъектов выполнялись для вас автоматически, просто используйте
Editor.target
илиEditor.targets
. Если вы хотите, чтобы эти функции просто работали автоматически, используйтеSerializedObject
иSerializedProperty
.