Немного поздно знаю, но ответ - нет.
Даже если вы пишете на C и компилируете собственный код, есть dissasemblers / debuggers, которые позволят людям пройти через ваш код. Предоставлено - отладка оптимизированного кода без символической информации - боль, но это может быть сделано, мне приходилось иногда это делать.
Есть шаги, которые вы можете предпринять, чтобы сделать это сложнее - например, на окнах вы можете вызвать API IsDebuggerPresent в цикле, чтобы узнать, отлаживает ли кто-то ваш процесс, и если да, и это релиз-сборка - завершите процесс. Конечно, достаточно решительный атакующий может перехватить ваш вызов IsDebuggerPresent и всегда возвращать false.
Существует целый ряд методов, которые появились - люди, которые хотят что-то защитить, и люди, которые хотят взломать его широко, это настоящая гонка вооружений! После того, как вы пойдете по этому пути, вам придется постоянно обновлять / модернизировать свою защиту, нет остановки.
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
Попробуйте добавить круглые скобки, чтобы строка была объединена со строкой в правильном порядке.
Я думаю, что все дали решение, я хотел бы объяснить причину неожиданного результата.
Прежде всего, здесь вы можете проверить происхождение и как оцениваются операторы (слева, справа, ассоциативный и т. д.).
http://php.net/manual/fa/language.operators.precedence.php
Теперь, если мы проанализируем ваши предложение.
$ paperType = 'bond';
$ description = 'Paper:'. ($ paperType == 'bond')? 'Bond': 'Other';
1) Мы рассмотрим таблицу и выясним, что скобки сначала оцениваются, а затем. (конкатенация), а в конце - тернарный оператор '?', поэтому мы могли бы связать это следующим образом:
// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';
2) Теперь мы имеем тернарный оператор, мы знаем, что строка оценивается «true»
// php documentation При преобразовании в логическое значение следующие значения считаются FALSE:
... пустая строка и строка «0»
$ description = true? 'Bond': 'Other';
3) Наконец
$ description = 'bond';
Надеюсь, что я уточнил этот вопрос. Привет.
Это связано с приоритетом оператора. Вы должны сделать следующее:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');