Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅: ΠœΠΎΠ΄ΡƒΠ»ΡŒ — Умскул Π£Ρ‡Π΅Π±Π½ΠΈΠΊ

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ уравнСния с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ: 10 шагов

‘).insertAfter(«#intro»),$(‘

‘).insertBefore( «.youmightalsolike»),$(‘

‘).insertBefore(«#quiz_container»),$(‘

‘).insertBefore(«#newsletter_block_main»),ja(!0),c=document.getElementsByClassName(«scrolltomarker»),a=0;a

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅:

Π—Π°ΠΏΠΈΡΡŒ уравнСния

РСшСниС уравнСния

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ) являСтся любоС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСмСнная ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ скобки. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x{\displaystyle x} обозначаСтся ΠΊΠ°ΠΊ |x|{\displaystyle |x|}, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ модуля всСгда ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ нуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ являСтся Π½ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом). Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ матСматичСскоС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ уравнСния.

Π¨Π°Π³ΠΈ

  1. 1

    УяснитС матСматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ модуля. Он опрСдСляСтся Ρ‚Π°ΠΊ: |p|={pifΒ pβ‰₯0βˆ’pifΒ p<0{\displaystyle |p|={\begin{cases}p&{\text{if }}p\geq 0\\-p&{\text{if }}p<0\end{cases}}}. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли число p{\displaystyle p} ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π²Π΅Π½ p{\displaystyle p}. Если число p{\displaystyle p} ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π²Π΅Π½ βˆ’p{\displaystyle -p}. Π’Π°ΠΊ ΠΊΠ°ΠΊ минус Π½Π° минус Π΄Π°Π΅Ρ‚ плюс, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ βˆ’p{\displaystyle -p} ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½.[1] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    • НапримСр, |9| = 9; |-9| = -(- 9) = 9.
  2. 2

    УяснитС понятиС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ с гСомСтричСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния. ΠœΠΎΠ΄ΡƒΠ»ΡŒ числа Ρ€Π°Π²Π΅Π½ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ этим числом.

    [2] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠœΠΎΠ΄ΡƒΠ»ΡŒ обозначаСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ число, пСрСмСнная ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (|x|{\displaystyle |x|}). ΠœΠΎΠ΄ΡƒΠ»ΡŒ числа всСгда ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½.[3] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    • НапримСр, |βˆ’3|=3{\displaystyle |-3|=3} ΠΈ |3|=3{\displaystyle |3|=3}. Оба числа -3 ΠΈ 3 находятся Π½Π° расстоянии Ρ‚Ρ€Π΅Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΎΡ‚ 0.
  3. 3

    Π’ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ сторонС уравнСния. Π›ΡŽΠ±Ρ‹Π΅ числа ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½Ρ‹ Π²Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… скобок Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону уравнСния.[4] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу, поэтому, Ссли послС изолирования модуля ΠΎΠ½ Ρ€Π°Π²Π΅Π½ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу, Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

    [5] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    • НапримСр, Π΄Π°Π½ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ |6xβˆ’2|+3=7{\displaystyle |6x-2|+3=7}; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ… сторон уравнСния Π²Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ 3:
      |6xβˆ’2|+3=7{\displaystyle |6x-2|+3=7}
      |6xβˆ’2|+3βˆ’3=7βˆ’3{\displaystyle |6x-2|+3-3=7-3}
      |6xβˆ’2|=4{\displaystyle |6x-2|=4}

    Π Π΅ΠΊΠ»Π°ΠΌΠ°

  1. 1

    Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния. УравнСния с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, ΠΈΠ·Π±Π°Π²ΡŒΡ‚Π΅ΡΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… скобок, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ (ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ).[6] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    • НапримСр, ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ для |6xβˆ’2|=4{\displaystyle |6x-2|=4} являСтся 6xβˆ’2=4{\displaystyle 6x-2=4}.
  2. 2

    Π Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅. Для этого вычислитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ уравнСния.

    • НапримСр:
      6xβˆ’2=4{\displaystyle 6x-2=4}
      6xβˆ’2+2=4+2{\displaystyle 6x-2+2=4+2}
      6x=6{\displaystyle 6x=6}
      6×6=66{\displaystyle {\frac {6x}{6}}={\frac {6}{6}}}
      x=1{\displaystyle x=1}
  3. 3

    Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, ΠΈΠ·Π±Π°Π²ΡŒΡ‚Π΅ΡΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… скобок, Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС уравнСния ΠΏΠ΅Ρ€Π΅Π΄ числом ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π·Π½Π°ΠΊ «минус». [7] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

    • НапримСр, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ для |6xβˆ’2|=4{\displaystyle |6x-2|=4} являСтся 6xβˆ’2=βˆ’4{\displaystyle 6x-2=-4}.
  4. 4

    Π Π΅ΡˆΠΈΡ‚Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅. Для этого вычислитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ уравнСния.

    • НапримСр:
      6xβˆ’2=βˆ’4{\displaystyle 6x-2=-4}
      6xβˆ’2+2=βˆ’4+2{\displaystyle 6x-2+2=-4+2}
      6x=βˆ’2{\displaystyle 6x=-2}
      6×6=βˆ’26{\displaystyle {\frac {6x}{6}}={\frac {-2}{6}}}
      x=βˆ’13{\displaystyle x={\frac {-1}{3}}}

    Π Π΅ΠΊΠ»Π°ΠΌΠ°

  1. 1

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния. Для этого ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅[8] X Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x{\displaystyle x}, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния, Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

    Если ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ равСнство, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Π½ΠΎ.

    • НапримСр, Ссли Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния Π²Ρ‹ нашли, Ρ‡Ρ‚ΠΎ x=1{\displaystyle x=1}, ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ 1{\displaystyle 1} Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅:
      |6xβˆ’2|=4{\displaystyle |6x-2|=4}
      |6(1)βˆ’2|=4{\displaystyle |6(1)-2|=4}
      |6βˆ’2|=4{\displaystyle |6-2|=4}
      |4|=4{\displaystyle |4|=4}
  2. 2

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния. Если ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, это Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x{\displaystyle x}, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния, Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

    • НапримСр, Ссли Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уравнСния Π²Ρ‹ нашли, Ρ‡Ρ‚ΠΎ x=βˆ’13{\displaystyle x={\frac {-1}{3}}}, ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ βˆ’13{\displaystyle {\frac {-1}{3}}} Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅:
      |6xβˆ’2|=4{\displaystyle |6x-2|=4}
      |6(βˆ’13)βˆ’2|=4{\displaystyle |6({\frac {-1}{3}})-2|=4}
      |βˆ’2βˆ’2|=4{\displaystyle |-2-2|=4}
      |βˆ’4|=4{\displaystyle |-4|=4}
  3. 3

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. РСшСниС уравнСния являСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (Π²Π΅Ρ€Π½Ρ‹ΠΌ), Ссли ΠΏΡ€ΠΈ подстановкС Π² исходноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ равСнство.Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π°, ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

    • Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ |4|=4{\displaystyle |4|=4} ΠΈ |βˆ’4|=4{\displaystyle |-4|=4}, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ равСнства ΠΈ ΠΎΠ±Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ |6xβˆ’2|+3=7{\displaystyle |6x-2|+3=7} ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: x=1{\displaystyle x=1}, x=βˆ’13{\displaystyle x={\frac {-1}{3}}}.

    Π Π΅ΠΊΠ»Π°ΠΌΠ°

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹

  • ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ скобки ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² скобок ΠΏΠΎ Π²ΠΈΠ΄Ρƒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π Π΅ΠΊΠ»Π°ΠΌΠ°

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Об этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

На Π΄Ρ€ΡƒΠ³ΠΈΡ… языках

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ уравнСния с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ — Wiki How Русский

Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ) являСтся любоС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСмСнная ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ скобки. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x{\displaystyle x} обозначаСтся ΠΊΠ°ΠΊ |x|{\displaystyle |x|}, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ модуля всСгда ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ нуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ являСтся Π½ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом). Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ матСматичСскоС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ уравнСния.

Π­Ρ‚Ρƒ страницу просматривали 40Β 744 Ρ€Π°Π·Π°.

Π Π΅ΠΊΠ»Π°ΠΌΠ°


Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ / Π₯Π°Π±Ρ€

Низкий ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π° ΠΈ ΡΡ‚Ρ€ΠΎΠ³ΠΎΡΡ‚ΡŒ языка программирования β€” Π²Π΅Ρ‰ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ нСсовмСстимыС. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Π»ΠΈΠ±ΠΎ, ΠΊΠ°ΠΊ Rust, Π±ΡŒΡ‘ΡˆΡŒ ΠΏΠΎ Ρ€ΡƒΠΊΠ°ΠΌ borrow checker’ом β€” Π»ΠΈΠ±ΠΎ, ΠΊΠ°ΠΊ PHP, позволяСшь Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ быстро ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.Β 

На самом Π΄Π΅Π»Π΅, Ссли ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ, это становится Π½Π΅Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈ язык пСрСстаёт ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. АрхитСктура Π²Π°ΠΆΠ½Π΅Π΅ языка, ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° PHP Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ООП-языкС. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ «любой домохозяйкС» ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° PHP сопровоТдаСтся ΠΈ риском Π½Π°Π²ΠΎΡ€ΠΎΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π±Π΅Π·ΠΎΠ±Ρ€Π°Π·ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚Π°ΠΉΠΏΡ…ΠΈΠ½Ρ‚Ρ‹, Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹, статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты. Β 

Но Π² PHP Π΅ΡΡ‚ΡŒ ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ изъян: Π² Π½Ρ‘ΠΌ любой класс, функция ΠΈΠ»ΠΈ константа β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс ΠΈΠ· любого мСста Π² ΠΊΠΎΠ΄Π΅, ΠΈ Π½Π΅Ρ‚ способа ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. Π˜Π½Ρ‹ΠΌΠΈ словами, Π² PHP Π½Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках называСтся модулями.

Наша новая open-source Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° называСтся Modulite ΠΈ внСдряСт Π² PHP ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π­Ρ‚ΠΎ сквозная тСхнология: ΠΌΡ‹ внСдряСмся Π² IDE, Π² PHPStan, Π² KPHP, Π² CI, Π² Composer β€” ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ Π΅ΡΡ‚ΡŒ Π² языкС PHP.

БовсСм Π½Π΅Π΄Π°Π²Π½ΠΎ я рассказывал ΠΎ Modulite Π½Π° PHP Russia Π² Ρ€Π°ΠΌΠΊΠ°Ρ… HighLoad++. Π£ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° β€” ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ вмСсто чтСния, Ссли это ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Π° ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π·Π° ссылками.Β 

Modulite + internal

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ МСсси ΠΈ Адам. МСсси ΠΏΠΈΡˆΠ΅Ρ‚ мСссСндТСр (ΠΏΠ°ΠΏΠΊΠ° Messinger), Π° Адам ΠΏΠΈΡˆΠ΅Ρ‚ Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ (ΠΏΠ°ΠΏΠΊΠ° Adaminka). Π’ мСссСндТСрС Π΅ΡΡ‚ΡŒ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ. Π•Ρ‰Ρ‘ Π΅ΡΡ‚ΡŒ Π½ΠΎΡ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² ΠΊΠ°Π½Π°Π», ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈ Ρ‚.  п.

Адам ΠΏΠΈΡˆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡŽΠ·Π΅Ρ€Π° Π² ΠΊΠ°Π½Π°Π» ΠΈΠ· Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ. Он вставляСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡŽΠ·Π΅Ρ€Π° Π² Π±Π°Π·Ρƒ Ρ‡Π΅Ρ€Π΅Π· MsgDatabase ΠΈ создаёт JoinNotification β€” Β«ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π»ΠΈΠ· Ρ‡Π΅Ρ€Π΅Π· 2 часа» ΠΈΠ»ΠΈ Β«Π° Π² Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠΎΠ±Ρ‰Π΅?Β». Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Ρ‡Ρ‘ΠΌ? Π’Π΅Π΄ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΆΠ΅. БСгодня β€” Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

МСсси ΡƒΠ·Π½Π°Ρ‘Ρ‚ ΠΏΡ€ΠΎ этот ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ». Π§Ρ‚ΠΎ, ΠΌΠΎΠ», Π·Π° Π΄Π΅Π»Π°? Π’Π΅Π΄ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внутрСнности ΠΊΠ°Π½Π°Π»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π°Ρ‚ΡŒ Π½ΠΎΡ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, внСшний ΠΊΠΎΠ΄ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΡƒΠ΄Π° Π»Π΅Π·Ρ‚ΡŒ. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΎ Π½ΡŽΠ°Π½ΡΡ‹, ΠΏΡ€ΠΎ Ρ„Π»ΡƒΠ΄-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΈ Ρ‚.β€―ΠΏ. Рассылка ΠΏΡƒΡˆΠ΅ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π° с Π±Π°Π·ΠΎΠΉ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ β€” это ΡƒΠ΄Π΅Π» ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ мСссСндТСра, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, Ссли внСшний ΠΊΠΎΠ΄ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ классы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Но ΡƒΠ²Ρ‹, PHP позволяСт Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈ этим всСгда ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

И МСсси Ρ€Π΅ΡˆΠ°Π΅Ρ‚: Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ! Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°ΠΆΠ΅ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ писали.

МСсси ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эффСктивно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ инструмСнтов β€” Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ договорённостСй. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ Π½Π΅Π³ΠΎ Π² арсСналС Π΅ΡΡ‚ΡŒ Modulite, ΠΈ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ фокус: ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ‚ New β†’ Modulite from Folder… ΠΈ создаёт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ @messi-channels ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ Channels/. Он ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ Π³Π°Π»ΠΎΡ‡ΠΊΠΈ Π² Π΄Π΅Ρ€Π΅Π²Π΅ Notifications/ β€” Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ классы становятся internal.

И вуаля! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Адам Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСдоступный класс. Ошибка Π²ΠΈΠ΄Π½Π° Π² IDE, Π° Π² структурС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ @названия ΠΈ internal-Π±Π΅ΠΉΠ΄ΠΆΠΈ.

ЀизичСски это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ создался Ρ„Π°ΠΉΠ» Channels/.modulite.yaml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит, Π² частности, список export.

Modulite + require

Когда МСсси создал ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΠ½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зафиксировал export’Ρ‹: ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ зафиксировал Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС (зависимости, dependencies, requires β€” это синонимы).

Допустим, Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊ МСсси ΠΏΡ€ΠΈΡˆΡ‘Π» Π΄ΠΆΡƒΠ½. Π£ Π΄ΠΆΡƒΠ½Π° Π·Π°Π΄Π°Π½ΠΈΠ΅: ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ isUserSubscribed(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, подписан Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠ°Π½Π°Π». ОкСй, ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» Π΄ΠΆΡƒΠ½, ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄, Π½ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Π’ Ρ‡Ρ‘ΠΌ ошибка? Ѐункция currentUser() Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ модуля, ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² requires. На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ошибки Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ $user_id Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ снаруТи, Π° Π½Π΅ Π±Ρ€Π°Ρ‚ΡŒ id Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ: Π²ΠΎΡ‚ функция ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ. Β 

«ОкСй», β€” ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» Π΄ΠΆΡƒΠ½, β€” Β«Π”Π΅Π»ΠΎΠ²-Ρ‚ΠΎ. Π’ΠΎΠ·ΡŒΠΌΡƒ ΠΈ добавлю»:

ΠžΡ‚ ошибки-Ρ‚ΠΎ Π΄ΠΆΡƒΠ½ избавился. Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ измСнСнию .modulite.yaml: добавилась Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. А Π·Π½Π°Ρ‡ΠΈΡ‚, это Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Π½Π° Ρ€Π΅Π²ΡŒΡŽ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС МСсси скаТСт, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Но Ссли Π±Ρ‹ Π±Ρ‹Π» Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (Π½Π΅ currentUser(), Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ΅), Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΊΠ΅ΠΉ. Π’ любом случаС β€” появлСниС Π½ΠΎΠ²Ρ‹Ρ… зависимостСй Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ. А Ссли ΠΈ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚, это останСтся Π² истории Git.

Modulite + ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Π˜Ρ‚ΠΎΠ³ΠΎ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ β€” это обычная ΠΏΠ°ΠΏΠΊΠ° с PHP-ΠΊΠΎΠ΄ΠΎΠΌ.
Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΎΠ½Π° опрСдСляСт доступ Β«Π²Π½ΡƒΡ‚Ρ€ΡŒΒ» Ρ‡Π΅Ρ€Π΅Π· export.
Всё, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ΅, β€” Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅.
Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΎΠ½Π° опрСдСляСт доступ Β«Π½Π°Ρ€ΡƒΠΆΡƒΒ» Ρ‡Π΅Ρ€Π΅Π· requires.
НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС символы, Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² это явно.

Modulite + ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚

ЦСль ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ формулируСтся Ρ‚Π°ΠΊ: Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ разрастания энтропии Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ изоляция ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.

VKCOM, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, β€” это ΠΊΠ»ΡƒΠ±ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΊΡ€Π°ΠΉΠ½Π΅ высокой ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒΡŽ. Π₯очСтся Π΅Π³ΠΎ Ρ€Π°ΡΠΏΡƒΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ΡΡ, лишь добавляя Π½ΠΎΠ²Ρ‹Π΅ связи. МногиС ΠΏΠΎΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Composer-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ β€” Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΊΠΎΠ΄ Π½Π΅ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ΅Π½, ΠΏΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ внСшний Π²Ρ‹Π·ΠΎΠ², это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. И Π² 100% случаСв Ρƒ нас ΠΈΠΌΠ΅Π½Π½ΠΎ такая ситуация. Π›ΡŽΠ±ΠΎΠΉ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ нСймспСйс тСсно связан с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ β€” ΠΊΠ°ΠΊ Π² прямом, Ρ‚Π°ΠΊ ΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Вынос Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ, постСпСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ зависимости ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ это Π΄Π΅Π»Π°Π΅Ρ‚Π΅, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всё Ρ€Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π·Π°Π½ΠΎΠ²ΠΎ связывая ΠΊΠΎΠ΄ с ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ΠΎΠΌ. Π­Ρ‚ΠΎ происходит Π½Π΅ΠΏΡ€Π΅Π΄ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ инструмСнтов для контроля. Π’ΠΎΡ‡Π½Π΅Π΅, Π½Π΅ Π±Ρ‹Π»ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ позволяСт ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ участки ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌΠΈ этого участка. Π­Ρ‚ΠΎ позволяСт Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, постСпСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ число зависимостСй β€” ΠΈ гарантируя, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Π½Π΅ появляСтся. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ стрСмится ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ автономности, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π² ΠΏΠ°ΠΊΠ΅Ρ‚.

Из Β«ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @psalm-internal ΠΈ deptrac. ΠŸΠ΅Ρ€Π²Π°Ρ позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ нСймспСйс, Π³Π΄Π΅ функция ΠΈΠ»ΠΈ класс ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹. Π’ Ρ†Π΅Π»ΠΎΠΌ эта аннотация Ρ€Π΅ΡˆΠΈΠ»Π° Π±Ρ‹ вопрос ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ интСрфСйса, Π½ΠΎ Ссли Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс, Ρ‚ΠΎ вся концСпция ΠΏΠΎΡˆΠ°Ρ‚Π½Ρ‘Ρ‚ΡΡ. Π’ нашСй ΠΆΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ всё Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅, Π½ΡƒΠΆΠ΅Π½ явный export. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ requires Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. ΠŸΡ€ΠΎ deptrac β€” это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ€Π°ΡΠΏΠΈΡˆΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

И кстати, Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Когда ΠΌΠΎΠ΄ΡƒΠ»ΡŒ становится Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ β€” Π΄Π°, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π² ΠΏΠ°ΠΊΠ΅Ρ‚. А ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π°Ρ‡Π΅ΠΌ? Если Π½Π΅ прСдполагаСтся Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π΅ΠΏΡƒ, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ просто ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅. Π’Π΅Π΄ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ «вынСсти Π² ΠΏΠ°ΠΊΠ΅Ρ‚Β» Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ лишь ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ассоциация Β«ΠΏΠ°ΠΊΠ΅Ρ‚ β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, это изоляция». А Ссли изоляция обСспСчиваСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ β€” Ρ‚ΠΎ Composer ΡƒΠΆΠ΅ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ для этих Ρ†Π΅Π»Π΅ΠΉ.

Modulite + PHPStorm

Modulite ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π² PHPStorm. МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, хоткСями Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ классы ΠΈ сразу Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ошибки.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ модуля ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ

Π’ контСкстном мСню ΠΏΠ°ΠΏΠΊΠΈ ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ New -> Modulite from Folder….Β 

Π’Π°ΠΌ указываСтся имя модуля (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ) ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ символов (Π³Π°Π»ΠΎΡ‡ΠΊΠ°ΠΌΠΈ). ΠžΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ β€” это export, Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ β€” internal. ΠœΡ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ символами: Π½ΠΈΠΊΠ°ΠΊΠΈΡ… масок Β«ΠΏΠΎ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ΅Β» (Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании, Ρ‡Ρ‚ΠΎ впослСдствии). Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классы. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ константы, Π΄Π΅Ρ„Π°ΠΉΠ½Ρ‹. Π”Π°, Modulite ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ символами гранулярно. Π—Π°Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π΅Ρ„Π°ΠΉΠ½ΠΎΠ² Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΈ Ссли ΠΎΠ½ΠΈ internal, Ρ‚ΠΎ внСшний ΠΊΠΎΠ΄ ΠΈΡ… Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚.

Плагин автоматичСски сгСнСрируСт requires ΠΈ, Ссли Π½ΡƒΠΆΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ зависимости Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ПослС наТатия Β«OKΒ» откроСтся созданный .modulite.yaml.

Π”Π΅Π»Π°Π΅ΠΌ символы internal

Π’ΠΎΠ·Π»Π΅ символов модуля @name Π΅ΡΡ‚ΡŒ надпись exported from @name

(ΠΈΠ»ΠΈ internal in @name). ΠœΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Alt+Enter, Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· контСкстноС мСню прямо Π½Π° этом Ρ…ΠΈΠ½Ρ‚Π΅. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ классов: Π΅Ρ‰Ρ‘ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ Ρƒ Π΄Π΅Ρ„Π°ΠΉΠ½ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС Π½ΠΎΠ²Ρ‹Π΅ символы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ (Ρ‚.β€―ΠΊ. Π½Π΅ экспортированы) β€” ΠΎΠ± этом ΠΈ подсказки лишний Ρ€Π°Π· Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚.

Π”Π΅Π»Π°Π΅ΠΌ internal ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ класс

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: Π΅ΡΡ‚ΡŒ класс SortPolicy Π² @messi-folders. Он, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ, Π½ΠΎ ΡƒΠΆΠ΅ Π³Π΄Π΅-Ρ‚ΠΎ внСшний ΠΊΠΎΠ΄ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚. Если просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ internal, Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ сломаСтся. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠžΡ‚Π²Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ: ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ internal, Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (ΠΈ ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ), Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ Π½Π΅ смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ internal-класс. Π’Π°ΠΊ ΠΌΡ‹ зафиксируСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π΅ΠΌΡƒ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Ρ…ΡƒΠΆΠ΅.

ДСйствиС Make internal in @name Π΄Π΅Π»Π°Π΅Ρ‚ это автоматичСски! Плагин Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ использования Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ добавляСт ΠΈΡ… Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Новый ΠΊΠΎΠ΄ ΠΈ require

Π’ сСкции ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° require ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС внСшниС символы, Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ ΠΊ использованию. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ создании модуля ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ это автоматичСски. Π’Π°ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Composer-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, внСшниС классы, Π΄Π΅Ρ„Π°ΠΉΠ½Ρ‹ ΠΈ константы, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.Β 

ΠŸΡ€ΠΈ написании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ зависимости, ΠΈΠ½Π°Ρ‡Π΅ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π•ΡΡ‚ΡŒ quick fix для Π΅Ρ‘ исправлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ измСнСнию yaml-Ρ„Π°ΠΉΠ»ΠΈΠΊΠ° ΠΈ явной фиксации Π½ΠΎΠ²ΠΎΠΉ зависимости. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Π½Π° Ρ€Π΅Π²ΡŒΡŽ ΠΈ останСтся Π² Git.

Пока Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΌΠ°Π»ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСсятки Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй ΠΎΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… классов ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° всё большС ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒΡΡ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… символов Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° зависимости ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ зависимостям ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² yaml-Ρ„Π°ΠΉΠ»Π΅ ΠΌΡ‹ всСгда Π²ΠΈΠ΄ΠΈΠΌ, насколько ΠΌΠΎΠ΄ΡƒΠ»ΡŒ привязан ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ β€” ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. ΠŸΡ€ΠΈ этом имя подмодуля Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ родитСля. НапримСр, Ссли Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ @messi, Ρ‚ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ @messi/folders ΠΈ Ρ‚.β€―ΠΏ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ модуля, ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π°Ρ€ΡƒΠΆΡƒ, Ρ‚Π°ΠΊ ΠΈ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ. ΠŸΡƒΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ структура мСссСндТСра, с трСмя модулями:

Messinger/
Β Β Channels/Β  Β  @messi-channels
Β Β Β Β ...
Β Β Folders/ Β  Β  @messi-folders
Β Β Β Β ...
Β Β Kernel/Β  Β  Β  @messi-kernel
Β Β Β Β ...

Π’ Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ это Ρ‚Ρ€ΠΈ нСзависимых модуля, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰ΠΈΠΌ нСймспСйсом, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ… (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… export’ов). Π˜Π½Ρ‹ΠΌΠΈ словами, Π² этой структурС Π°Π΄ΠΌΠΈΠ½ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π·Ρ‚ΡŒ Π² ядро мСссСндТСра, ΠΈ Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄ мСссСндТСра Ρ€ΡΠ΄Ρ‹ΡˆΠΊΠΎΠΌ.

Π“Ρ€Π°ΠΌΠΎΡ‚Π½Π΅Π΅ β€” Π½Π΅ Ρ‚Π°ΠΊ. Π“Ρ€Π°ΠΌΠΎΡ‚Π½Π΅Π΅ β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ внСшний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ @messi ΠΈ Ρ‚Ρ€ΠΈ подмодуля. ΠŸΡ€ΠΈ этом Ρ‡Ρ‚ΠΎΠ±Ρ‹ @messi/kernel Π±Ρ‹Π» ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ.

Messinger/ Β  Β  @messi
Β Β Channels/Β  Β  @messi/channels
Β Β Β Β ...
Β Β Folders/ Β  Β  @messi/folders
Β Β Β Β ...
Β Β Kernel/Β  Β  Β  @messi/kernel (internal)
Β Β Β Β ...

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, просто Π΄Π΅Π»Π°Π΅ΠΌΒ New Modulite from Folder Π½Π° Messinger/ ΠΈ настраиваСм Π³Π°Π»ΠΎΡ‡ΠΊΠΈ:

Как ΠΈ оТидаСтся, ΠΈΠ· Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ @messi/kernel нСдоступСн, Π΄Π°ΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² requires. А Π²ΠΎΡ‚ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… внутрСнностСй мСссСндТСра β€” ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, слСдуя ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π½Π° export, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π»ΠΎΠΆΠ΅Π½Ρ‹ kernel’ом). По сути, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’ΠΎΠΎΠ±Ρ‰Π΅, это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ (ΠΈ Π΄Π°ΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ) процСсс: сначала Π΄Π΅Π»Π°Ρ‚ΡŒ модулями ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ нСбольшиС ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, называя ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Π»ΠΈΠ½Π½ΠΎ, ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ @feed-smart-blocks-proxy. А ΠΏΠΎΡ‚ΠΎΠΌ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ рСфакторится ΠΈ появляСтся структура, ΡƒΠΆΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, укорачивая Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅.

Find usages Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля

Одна ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ„ΠΈΡ‡ ΠΏΠ»Π°Π³ΠΈΠ½Π° β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° вопросы Β«Π“Π΄Π΅?Β» ΠΈ Β«Π§Ρ‚ΠΎ?Β». Допустим, Π²Ρ‹ Π»Π°Π·ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π·ΠΎΠ² currentUser(). Π›ΠΈΠ±ΠΎ смотритС yaml-Ρ„Π°ΠΉΠ»ΠΈΠΊ ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² requires. И сразу Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΠΎΠΊΠ΅ΠΉ, ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ зависит ΠΎΡ‚ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ насколько сильно? Если Ρ‚Π°ΠΌ ΠΏΠ°Ρ€Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², это Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ, Π° Ссли 100, Ρ‚ΠΎ ΠΏΠ΅Ρ‡Π°Π»ΡŒ.

Π’ контСкстном мСню любого символа, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Find usages, добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ β€” Β Find usages in @{current}:

Плагин ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ окошко β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ модуля. И Π΄Π°ΠΆΠ΅ Ссли Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ символ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ тысячи Ρ€Π°Π·, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° β€” Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π°.

И Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрфСйсныС ΡˆΡ‚ΡƒΠΊΠΈΒ 

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ удобства, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ. Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ β€” Π²Π»Π°Π·ΠΈΠΌ Π² IDE Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ. И это становится Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Modulite + yaml config

Плагин β€” это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ UI Π½Π°Π΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠΌ (Ρ„Π°ΠΉΠ»ΠΈΠΊΠΎΠΌ .modulite.yaml).
Всё это ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π· ΠΏΠ»Π°Π³ΠΈΠ½Π° β€” просто Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.
ИмСнно Ρ„Π°ΠΉΠ»ΠΈΠΊ хранится ΠΏΠΎΠ΄ Git’ом, ΠΈΠΌΠ΅Π½Π½ΠΎ измСнСния Π² Π½Ρ‘ΠΌ
Π²ΠΈΠ΄Π½Ρ‹ Π½Π° Ρ€Π΅Π²ΡŒΡŽ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ зависимостСй ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

name: "@modulite-name"
description: "..."
namespace: "Some\\Namespace\\"
export:
  - "ClassInNamespace"
  - "OrConcrete::CLASS_MEMBER"
  # and others
force-internal:
  - "ClassInNamespace::staticMethod()"
  # and others
require:
  - "@another-modulite"
  - "#composer/package"
  - "\\GlobalClass"
  # and others
allow-internal-access:
  "@rpc":
    - "ClassAllowedForRpcModule"
    - "OrConcrete::method()"
  # and others

name β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, начинаСтся с @. По Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ прСфиксированы ΠΈΠΌΠ΅Π½Π΅ΠΌ родитСля, Ρ‚ΠΈΠΏΠ° @api/exceptions. Когда курсор Π½Π° ΠΈΠΌΠ΅Π½ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Refactor | Rename.

description β€” ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ строка, Π½Π° Π»ΠΎΠ³ΠΈΠΊΡƒ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт.

namespace β€” пространство ΠΈΠΌΡ‘Π½. Π‘Π»ΡƒΠΆΠΈΡ‚ для Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΠ½Π³Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅: Ρ‚Π°ΠΊ, Relative\\Symbol рСзолвится Π² класс \Some\Namespace\Relative\Symbol.

export β€” ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ символы модуля, список строк. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹, Π½Π΅ пСрСчислСнныС здСсь явно, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ (internal). Π‘Π΅Π· Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ слСша (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ namespace).

  • someFunction() Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½Π΅ класса; особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, содСрТащих просто Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² global scope.

  • SOME_DEFINE экспортируСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ константу ΠΈΠ»ΠΈ define.

  • ClassName Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ класс; ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС Ρ‡Π»Π΅Π½Ρ‹ этого класса Ρ‚ΠΎΠΆΠ΅ доступны, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² ΠΈΠ³Ρ€Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ publicβ€―/β€―privateβ€―/β€―protected ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠ². РСшСниС для Π±ΠΎΠ»Π΅Π΅ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒ Π΄Π°Π»Π΅Π΅.

force-internal β€” ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρƒ Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… классов. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класс Π² export ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ доступ ΠΊΠΎ всСм public-символам, Π° здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡ… форсированно ΡΠΊΡ€Ρ‹Ρ‚ΡŒ.

require β€” список Π²Π½Π΅ΡˆΠ½ΠΈΡ… символов, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ΄Π° модуля. Если ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ символу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ пСрСчислСн, Π±ΡƒΠ΄Π΅Ρ‚ ошибка. Π—Π΄Π΅ΡΡŒ строки ΡƒΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со слСша, вСдь ΠΎΠ½ΠΈ Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ namespace.

  • @another-modulite ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ всС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ символы Π² Π½Ρ‘ΠΌ.

  • #composer/package ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Composer-ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ всС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ символы Π² Π½Ρ‘ΠΌ.

  • \VK\SomeClass ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ класс (Ρ‚.β€―Π΅. Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ; вСдь Ссли ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π° Π½Π΅ сам класс).

  • \someFunction() ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

  • \SOME_DEFINE ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ константу ΠΈΠ»ΠΈ define.

  • some_var для использования Π²Π½ΡƒΡ‚Ρ€ΠΈ выраТСния global $some_var.

allow-internal-access Π·Π°Π΄Π°Ρ‘Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ internal-символы. Π­Ρ‚ΠΎ стоит Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Modulite + ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ связный, Π½Π΅ всСгда удаётся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ интСрфСйс для всСх. Часто Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ хочСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π½ΠΎ ΡƒΠΆΠ΅ Π³Π΄Π΅-Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Π³ΠΎ использования. И ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹Ρ… использований Π½Π΅ появлялось.

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли А Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ΄Π»Π΅Π·Ρ‚ΡŒ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π’, Ρ‚ΠΎ Π½Π΅ А ΠΏΠΈΡˆΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π’.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠŸΡƒΡΡ‚ΡŒ Адам Π² своСй Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ всё-Ρ‚Π°ΠΊΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π°Π»Π΅Π·Ρ‚ΡŒ Π² ядро мСссСндТСра, Π° ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅. Но ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρƒ сСбя «я Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽ сСбС Π»Π΅Π·Ρ‚ΡŒ Π² ядро». А ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³Π΄Π°? А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: Адам ΠΈΠ΄Ρ‘Ρ‚ ΠΊ МСсси ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ Π΅ΠΌΡƒ Π»Π΅Π·Ρ‚ΡŒ Π² мСссСндТСр. И Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, МСсси Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ прСдусмотрСл, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Π΅Π³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚. Π’ΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ API, ΠΈ Адам Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, МСсси просто Π·Π°Π±Ρ‹Π» ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символ β€” Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ свой ΠΊΠΎΠ½Ρ„ΠΈΠ³, ΠΈ всё. А ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ corner case, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π΄ΠΎΠ»Π³ΠΎ β€” Π²ΠΎΡ‚ Ρ‚ΠΎΠ³Π΄Π° МСсси ΠΈ ΠΏΡ€Π°Π²Π΄Π° Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ @messi-kernel Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΠΎΠ΄Π»Π΅Π·Ρ‚ΡŒ ΠΊΡƒΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ. Но β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Адаму, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ мСста Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ, ΠΈ большС Π½ΠΈΠΊΠΎΠΌΡƒ.Β 

Π‘Π°ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΈΡˆΡƒΡ‚ΡΡ Ρ‚Π°ΠΊ. ΠšΠ»ΡŽΡ‡ β€” это функция, класс ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это список символов, Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² export. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

allow-internal-access:
  "@adaminka":
    - "MsgDatabase::insertUser()"
    - "MsgDatabase::TABLE_MESSAGES"
  "\\SomeGlobalClass\\itsMethod()":
    # more exceptions

Modulite + PHPStan

ИмСнно благодаря ΠΊΠΎΠ½Ρ„ΠΈΠ³Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΒ 
Π²ΠΎ врСмя компиляции, Π² Git-Ρ…ΡƒΠΊΠ°Ρ… ΠΈ Π² Teamcity.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°ΠΆΠ΅ Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ IDE,
ΠΎΠ½ Π½Π΅ смоТСт Π·Π°ΠΏΡƒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² ΠΎΠ±Ρ…ΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ Modulite для PHPStan. ΠœΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ yaml-Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΡ‚ΡŒ символы Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° классах, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ функциях β€” ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π² IDE.Β 

Из Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ β€” это PHPStan-кСш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ устроСна Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ yaml-ΠΏΡ€Π°Π²ΠΈΠ» ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΈΡΡ‡Π΅Π·Π°Ρ‚ΡŒ ошибки Π² PHP-ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ мСнялся. Но PHPStan Π½Π΅ запускаСт Π°Π½Π°Π»ΠΈΠ· Π½Π° Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ старыС ошибки. Если Π±ΡƒΠ΄Π΅Ρ‚ запрос ΠΎΡ‚ сообщСства, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ PHPStan. А ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΈ сбросС кСша это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всСгда.

Ошибки Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ для PHPStan Π²ΠΈΠ΄Π΅:

Modulite + KPHP

KPHP ΠΏΠΎΠΌΠΈΠΌΠΎ php-исходников Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ yaml-Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ. Если ΠΎΠ½ΠΈ содСрТат ошибки, компиляция прСрываСтся Π² самом Π½Π°Ρ‡Π°Π»Π΅. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Из Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ β€” Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° этапы: сначала встраиваниС констант, ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ PHPDoc, ΠΏΠΎΡ‚ΠΎΠΌ связка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (call graph) ΠΈ Ρ‚. д. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½Π΅ констант, KPHP Π½Π΅ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ дальшС. Аналогично, Ссли Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ классы Π² Ρ‚Π°ΠΉΠΏΡ…ΠΈΠ½Ρ‚Π°Ρ…, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΡΡ‚Π°Ρ‚ΠΈ, KPHP расцСниваСт Composer-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠ°ΠΊ нСявныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ автоматичСски провСряСт Π½ΡƒΠΆΠ½Ρ‹Π΅ requires, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π΅ Π»Π΅Π·ΡƒΡ‚ Π² ΠΊΠΎΠ΄ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ для KPHP Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π° ΠΈ сдСлана ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ концСпция. И лишь ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠ°ΡΡΡ вСрсия Π±Ρ‹Π»Π° Π²Ρ‹Π»ΠΎΠΆΠ΅Π½Π° ΠΊΠ°ΠΊ PHPStan-ΠΏΠ»Π°Π³ΠΈΠ½, Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ копипастой плюсовой ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ дальнСйшСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ нСзависимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Π² IDE, Π² KPHP ΠΈ Π² PHPStan. Но ΠΎΡ‚ этого Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ ΡƒΠΉΠ΄Ρ‘ΡˆΡŒ.

Modulite + Π΄Π΅ΠΏΠ»ΠΎΠΉ

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅ΠΌ, Π³Π΄Π΅ поддСрТиваСтся Modulite ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅:

  • Π² KPHP полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² VKCOM Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅;

  • Π² PHPStan Ρ‚Π° ΠΆΠ΅ вСрсия, Ρƒ нас Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ спСцифичСскиС PHPStan-Π±Π°Π³ΠΈ;

  • Π² noverify Π½Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ ΠΎΠ½Π° ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Π°;

  • Π² Psalm Π½Π΅ Π΄Π΅Π»Π°Π»ΠΈ, Π½ΠΎ тСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ;

  • Π² Git Hooks ΠΈ TeamCity-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°Ρ… провСряСтся Π»ΠΈΠ±ΠΎ PHPStan, Π»ΠΈΠ±ΠΎ KPHP;

  • Π² PHPStorm всё поддСрТиваСтся ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ;

  • для Π΄Ρ€ΡƒΠ³ΠΈΡ… IDE Π½Π΅ Π΄Π΅Π»Π°Π»ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ (Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅).

Modulite + Composer

Modulite ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅.
Π•Ρ‰Ρ‘, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, разрабатывая любой Composer-ΠΏΠ°ΠΊΠ΅Ρ‚:
ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ внутрСнности ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌΠΈ?
И Π΄Π°ΠΆΠ΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ export Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Π΅Π³ΠΎ Π² Composer Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚.

Ѐилософия такая: разрабатывая ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Как ΠΈ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΎΡ‡ΠΊΠΈ со своими областями отвСтствСнности, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ requires ΠΈ Ρ‚.β€―ΠΏ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ΠŸΡƒΡΡ‚ΡŒ ГСрасим ΠΏΠΈΡˆΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ для прСобразования Ρ€Π΅Ρ‡ΠΈ Π² тСкст. Π­Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ voice-text, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (Π² частности, @impl):

Как ΠΈ оТидаСтся, Π² EmojiTable нСльзя Π·Π°Π»Π΅Π·Ρ‚ΡŒ снаруТи, это вСдь internal. Π‘Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ @impl обязан ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ requires ΠΈ Ρ‚.β€―ΠΏ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΏΠ°ΠΊΠ΅Ρ‚ ГСрасима Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ МСсси внСдряСт Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΡƒ аудиосообщСний. Он ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Composer, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ мСссСндТСра, Π΄ΠΎΠ»ΠΆΠ΅Π½ явно ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ #vk/voice-text Π² requires (ΠΏΡ€ΠΈ использовании любого символа ΠΏΠ»Π°Π³ΠΈΠ½ это сам ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ ΠΈ вставит).

На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ ΠΎΠ½ становится нСявным ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠ°ΠΏΠΊΠ° vendor/vk/voice-text β€” это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ #vk/voice-text. ВсС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ: Ρ‚Π°ΠΊ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ @impl Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ #vk/voice-text/@impl Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΡ‘Π½. Π£ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π΅ Π·Π°Π΄Π°Π½ export, ΠΈ для нСявных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ дСйствуСт Π»ΠΎΠ³ΠΈΠΊΠ° Β«Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ всё». Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ρƒ модуля #vk/voice-text/@impl собствСнный export Π²ΠΏΠΎΠ»Π½Π΅ сСбС Π΅ΡΡ‚ΡŒ, ΠΈ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.

Π’Π°ΠΊ, Ссли МСсси Ρ€Π΅ΡˆΠΈΡ‚ Π·Π°Π»Π΅Π·Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ГСрасима, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции:

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Modulite ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Composer: Π΄Π°ΠΆΠ΅ Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явных export’ов ΠΈΠ· Π½Π΅Π³ΠΎ. ДСлаСтся это Ρ‚Π°ΠΊ: рядом с composer.json создаём Ρ„Π°ΠΉΠ»ΠΈΠΊ .modulite.yaml.

  • name = "<composer_root>".

  • namespace = "The\\Same\\As\\PSR4\\".

  • export пСрСчисляСм ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

  • force-internal Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

  • require оставляСм пустым, ΠΎΠ½ всё Ρ€Π°Π²Π½ΠΎ бСрётся ΠΈΠ· composer.json.

НапримСр, ГСрасим ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ TextToSpeech ΠΈ WaveMultiplier Π²Π½ΡƒΡ‚Ρ€ΠΈ export, поэтому Transliteration Π±ΡƒΠ΄Π΅Ρ‚ internal:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ· ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π° Π½Π΅Ρ‚ доступа ΠΊ Transliteration. И ΠΊ нСймспСйсу VK\VoiceText\impl Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚. А Π²ΠΎΡ‚ Ссли Π±Ρ‹ ГСрасим упомянул @impl Π² export, Ρ‚ΠΎ Π±Ρ‹Π» Π±Ρ‹ (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… символов @impl ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅).

Modulite + Deptrac

Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Ρƒ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ Π²Ρ€ΠΎΠ΄Π΅ Β«Ρ‚Π°ΠΊ вСдь Π΅ΡΡ‚ΡŒ Deptrac, это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅Β». НС ΠΎΠ΄Π½ΠΎ. Modulite ΠΈ Deptrac ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ созданы для Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ концСпциями.

Главная Ρ†Π΅Π»ΡŒ Modulite β€” Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π° ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π΅ΠΉ Π±Π΅ΡΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ со всСми Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, β€” Π° ΠΏΠΎΡ‚ΠΎΠΌ постСпСнно ΠΎΡ‚ Π½ΠΈΡ… ΠΈΠ·Π±Π°Π²Π»ΡΡ‚ΡŒΡΡ, распутывая ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚. Для этого Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π° направлСния: Π²Π½ΡƒΡ‚Ρ€ΡŒ (export) ΠΈ Π½Π°Ρ€ΡƒΠΆΡƒ (require). Π’Π°ΠΊ ΡƒΠΆ Π²Ρ‹ΡˆΠ»ΠΎ, Ρ‡Ρ‚ΠΎ подобная Π·Π°Π΄Π°Ρ‡Π° Π½Π° самом Π΄Π΅Π»Π΅ выраТаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, поэтому ΠΌΡ‹ сдСлали ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с примСсями ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. И спроСктировано всё ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡΡΡŒ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Π»Π΅Π·Ρ‚ΡŒ Π² IDE.Β 

Визуализация Π² IDE β€” это ΠΈ ΠΏΡ€Π°Π²Π΄Π° Π²Π°ΠΆΠ½ΠΎ, Π½Π° самом Π΄Π΅Π»Π΅ это Π³Π»Π°Π²Π½ΠΎΠ΅ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования. Плюс Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ ΠΏΠΎΠ΄ Git’ом ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅ΠΌΠΈ code owners, Π² Ρ‡ΡŒΡ‘ΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ‚, Π° Π½Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ стационарным ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠΌ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ настройкС ΠΏΡ€Π°Π² ΠΌΠ΅Ρ€ΠΆΠ° Π²Π΅Ρ‚ΠΎΠΊ.Β 

Deptrac β€” это ΠΏΡ€ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ слои (Ρ…Π°-Ρ…Π°, Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ Π² ΠΊΠ»ΡƒΠ±ΠΊΠ΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π° с бСсконСчной Ρ†ΠΈΠΊΠ»ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΅ΡΡ‚ΡŒ слои). Условно, ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Β«ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π·Ρ‚ΡŒ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈΒ», опСрируя нСймспСйсами ΠΈ классами ΠΏΠΎ маскС (Π²ΠΎΡ‚ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΊΠ°ΠΊ Ρ€Π°Π· Π½Π΅ опишСшь). Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎ internal, Π½Π΅ ΠΏΡ€ΠΎ явныС зависимости ΠΈ ΡƒΠΆ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΏΡ€ΠΎ Π·Π°ΠΌΠ΅Π½Ρƒ Composer’а Π² ΠΏΠ»Π°Π½Π΅ изоляции ΠΊΠΎΠ΄Π°. Deptrac скорСС ΠΏΡ€ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Β«Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²Β». Если ΡƒΠΆ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Deptrac большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ†Π²Π΅Ρ‚Π°, Ρ‡Π΅ΠΌ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Modulite + Ρ†Π²Π΅Ρ‚Π°

ΠŸΡ€ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ я Ρ‚ΠΎΠΆΠ΅ ΡƒΠΆΠ΅ писал.Β 

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ β€” для Ρ†Π²Π΅Ρ‚ΠΎΠ² Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ для IDE, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ call graph, Ρ†Π²Π΅Ρ‚Π° ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ сквозь ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². А Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ для любой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½ΡƒΠΆΠ½Ρ‹ всСго Π΄Π²Π° Ρ€Π΅Π±Ρ€Π°, Π·Π°Ρ€Π°Π½Π΅Π΅ проиндСксированныС. И ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π° О(1) ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ β€” это ΡƒΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ вписываСтся Π² PHPStorm ΠΈ PHPStan.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ†Π²Π΅Ρ‚Π° β€” это Π±ΠΎΠ»Π΅Π΅ гибкая ΠΈ красивая концСпция. А Modulite β€” Π±ΠΎΠ»Π΅Π΅ практичная.

Modulite + этимология

РасскаТу, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Modulite называСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ πŸ™‚

Π― нСдолюбливаю слово Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ», ΠΎΠ½ΠΎ слишком ΠΎΠ±Ρ‰Π΅Π΅ ΠΈ встрСчаСтся Π²Π΅Π·Π΄Π΅. НС хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наши ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡƒΡ‚Π°Π»ΠΈ с JS-модулями, с Composer-модулями ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ искали ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° связь с ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚ΠΎΠΌ β€” всё-Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго для Π½Π΅Π³ΠΎ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚ β€” это ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°. МоТно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈ Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ», считаСм это синонимами.

Modulite + Π²Ρ‹

ЕстСствСнно, всС наши Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π½Π° GitHub.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ставим ΠΏΠ»Π°Π³ΠΈΠ½ Π² IDE Π²ΠΎΡ‚ ΠΎΡ‚ΡΡŽΠ΄Π°.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, скачиваСм Ρ€Π΅ΠΏΡƒ modulite-example-project. Π­Ρ‚ΠΎ PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Он содСрТит нСсколько ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄Π½Ρ‹ ΠΈ Π² IDE, ΠΈ Π² PHPStan, ΠΈ Π² KPHP. МоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Π² Ρ‡Ρ‘ΠΌ ошибки, ΠΏΠΎΡ‡ΠΈΠ½ΠΈΡ‚ΡŒ β€” Π² ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ косяки МСсси ΠΈ Адама.

И ΠΏΠΎΡΠΊΡ€ΠΎΠ»Π»ΠΈΡ‚ΡŒ большой красивый лСндос β€” Π½Π° Π½Ρ‘ΠΌ Ρ‚Π° ΠΆΠ΅ информация, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π½ΠΎ Ρ‡ΡƒΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.

Modulite + ссылки

Подводим ΠΈΡ‚ΠΎΠ³ΠΈ: Modulite дополняСт язык PHP модулями,
Π½Π΅ вмСшиваясь Π² Π΅Π³ΠΎ синтаксис, Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ рядом.
Он ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ для старта Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹
Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π° ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ.

ΠŸΡ€ΠΎΠ΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽ здСсь всС Π½ΡƒΠΆΠ½Ρ‹Π΅ рСсурсы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅ΠΎ с послСднСго выступлСния:

  • Π’ΠΈΠ΄Π΅ΠΎ с HighLoad++: «ЧСстныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π°, ΠΈΠ»ΠΈ Когда Composer Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Β»

  • Π›Π΅Π½Π΄ΠΈΠ½Π³ ΠΏΡ€ΠΎ Modulite.

  • Modulite GitHub.

  • Modulite plugin for PHPStan.

  • modulite-example-project.

  • KPHP β€” наш компилятор.

  • Π§Π°Ρ‚ Π² Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ΅ β€” KPHP (Unofficial). Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ вопросы.

r — ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля блСстящий

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ модуля ΠΈ Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, которая создаСт Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° находится Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ Π²Π²ΠΎΠ΄Π°. Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΡΡŽΠΆΠ΅Ρ‚ опрСдСляСтся Π² собствСнном ΠΌΠΎΠ΄ΡƒΠ»Π΅.

 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (блСстящая)
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (блСстящиС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹)
uiForModal <<- функция (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) {
  нс <- НБ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)
    список Ρ‚Π΅Π³ΠΎΠ²(
        Ρ„Π»ΡŽΠΈΠ΄Π ΠΎΡƒ(
            plotOutput(outputId = ns("ΡΡŽΠΆΠ΅Ρ‚")),
            слайдСрВвод(
                inputId =ns("кластСры"),
                label = "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ кластСров",
                ΠΌΠΈΠ½.  = 2, макс. = 6, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 3, ΡˆΠΈΡ€ΠΈΠ½Π° = "100%"
            )
        )
    )
}
serverForModal <<- функция (Π²Π²ΠΎΠ΄, Π²Ρ‹Π²ΠΎΠ΄, сСанс) {
    output$plot <- renderPlot({
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π³ΠΎΠ»ΠΎΠ²Π° (радуТная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°))
        участок(Π§Π΅ΠΏΠ°Π».Π¨ΠΈΡ€ΠΈΠ½Π° ~ Π§Π°ΡˆΠ΅Π»ΠΈΡΡ‚ΠΈΠΊ.Π”Π»ΠΈΠ½Π°,
            data = ирис, col = Π²ΠΈΠ΄Ρ‹,
            Ρ€Ρ‡ = 20, сэкс = 2)
        Ρ‚ΠΎΡ‡ΠΊΠΈ (kmeans (Ρ€Π°Π΄ΡƒΠΆΠΊΠ° [ 1: 2], input $ кластСры) $ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹,
            pch = 4, cex = 4, lwd = 4)
    })
}
ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс <- Ρ„Π»ΡŽΠΈΠ΄Π½Π°Ρ страница(
  actionButton("showPlot", "showPlot")
)
сСрвСр <- функция (Π²Π²ΠΎΠ΄, Π²Ρ‹Π²ΠΎΠ΄) {
    Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒEvent (Π²Ρ…ΠΎΠ΄ $ showPlot, {
        show_alert(
            title = "НСкоторый Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ",
            тСкст = Ρ‚Π΅Π³ΠΈ $ div (
                uiForModal("test1")
            ),
            HTML = ИБВИНА,
            ΡˆΠΈΡ€ΠΈΠ½Π° = "80%"
        )
    })
    callModule(serverForModal, "test1")
}
runApp(shinyApp(ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, сСрвСр))
 

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Код Π½ΠΈΠΆΠ΅ - моя нСудачная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠ°ΠΊ-Ρ‚ΠΎ связана с пространством ΠΈΠΌΠ΅Π½. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс с Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠΌ, Π½ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅ отобраТаСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² пространствС ΠΈΠΌΠ΅Π½ сСрвСра для ΡΡŽΠΆΠ΅Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, поТалуйста, ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ ΠΌΠ½Π΅?

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (блСстящая)
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (блСстящиС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹)
uiForModal <<- функция (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) {
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)
    нс <- НБ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (нс (Β«Π³Ρ€Π°Ρ„ΠΈΠΊΒ»))
    список Ρ‚Π΅Π³ΠΎΠ²(
        Ρ„Π»ΡŽΠΈΠ΄Π ΠΎΡƒ(
            plotOutput(outputId = ns("ΡΡŽΠΆΠ΅Ρ‚")),
            слайдСрВвод(
                inputId =ns("кластСры"),
                label = "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ кластСров",
                ΠΌΠΈΠ½. = 2, макс. = 6, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 3, ΡˆΠΈΡ€ΠΈΠ½Π° = "100%"
            )
        )
    )
}
serverForModal <<- функция (Π²Π²ΠΎΠ΄, Π²Ρ‹Π²ΠΎΠ΄, сСанс) {
    output$plot <- renderPlot({
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π³ΠΎΠ»ΠΎΠ²Π° (радуТная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°))
        участок(Π§Π΅ΠΏΠ°Π».Π¨ΠΈΡ€ΠΈΠ½Π° ~ Π§Π°ΡˆΠ΅Π»ΠΈΡΡ‚ΠΈΠΊ.Π”Π»ΠΈΠ½Π°,
            data = ирис, col = Π²ΠΈΠ΄Ρ‹,
            Ρ€Ρ‡ = 20, сэкс = 2)
        Ρ‚ΠΎΡ‡ΠΊΠΈ (kmeans (Ρ€Π°Π΄ΡƒΠΆΠΊΠ° [ 1: 2], input $ кластСры) $ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹,
            pch = 4, cex = 4, lwd = 4)
    })
}
uiForButton <<- функция (id) {
    нс <- НБ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)
    список Ρ‚Π΅Π³ΠΎΠ²(
        Ρ„Π»ΡŽΠΈΠ΄Π ΠΎΡƒ(
            actionButton(ns("showPlot"), "showPlot")
        )
    )
}
serverForButton <<- функция (Π²Π²ΠΎΠ΄, Π²Ρ‹Π²ΠΎΠ΄, сСанс, нс) {
    Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒEvent (Π²Ρ…ΠΎΠ΄ $ showPlot, {
        show_alert(
            title = "НСкоторый Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ",
            тСкст = Ρ‚Π΅Π³ΠΈ $ div (
                uiForModal(ns("test2"))
            ),
            HTML = ИБВИНА,
            ΡˆΠΈΡ€ΠΈΠ½Π° = "80%"
        )
    })
    callModule(serverForModal, ns("test2"))
}
ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс <- Ρ„Π»ΡŽΠΈΠ΄Π½Π°Ρ страница(
    uiForButton("test1")
)
сСрвСр <- функция (Π²Π²ΠΎΠ΄, Π²Ρ‹Π²ΠΎΠ΄) {
    callModule(serverForButton, "test1", NS("test1"))
}
    
runApp(shinyApp(ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, сСрвСр))
 

TypeError ΠžΠ±ΡŠΠ΅ΠΊΡ‚ 'module' Π½Π΅ вызываСтся Π² Python

Π’ Python Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ находятся Π² модулях ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…. Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится функция. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НапримСр,

.
  import math  

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ матСматичСский ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ factorial(), floor() ΠΈ fabs() Π² этом ΠΌΠΎΠ΄ΡƒΠ»Π΅. Но Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ math(), компилятор запутаСтся. Он выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ TypeError β€˜module’ object is not callable in Python.
Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ сосрСдоточимся Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π’ Python всС встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ модулями, поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² наш Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ΠœΠΎΠ΄ΡƒΠ»ΡŒ прСдставляСт собой Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ΄Π° Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ порядкС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ TypeError ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ» Π½Π΅ вызываСтся Π² Python

Π­Ρ‚ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС TypeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ» Π½Π΅ вызываСтся Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ путаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ класса ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ модуля. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² строкС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ модуля, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя модуля ΠΈ имя класса ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этой ошибки

Ошибка Β« TypeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«ΠΌΠΎΠ΄ΡƒΠ»ΡŒΒ» Π½Π΅ вызываСтся Β» Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° компилятор python путаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ модуля ΠΈ пытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ имя модуля ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

  # Π˜ΠΌΠΏΠΎΡ€Ρ‚ модуля ОБ

ΠΈΠΌΠΏΠΎΡ€Ρ‚ ОБ

os()  

Π’Ρ‹Π²ΠΎΠ΄:

  Traceback (послСдний послСдний Π²Ρ‹Π·ΠΎΠ²):

Π€Π°ΠΉΠ» "call.py", строка 4, Π² 

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы()

TypeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 'module' Π½Π΅ вызываСтся  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Β«osΒ» , Π° Π·Π°Ρ‚Π΅ΠΌ пытаСмся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Β«osΒ» имя модуля ΠΊΠ°ΠΊ функция.

И ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Β«osΒ» Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«osΒ», поэтому Β« TypeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 'module' is not callable Β» Β 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΌΡ‹ создадим ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Имя Ρ„Π°ΠΉΠ»Π° : mymodule.py

Код:

  ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΅Π³ΠΎ модуля():

 myval='STechies'

 print(myval)  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ создали Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«mymodule.pyΒ» ΠΈ Π² этом Ρ„Π°ΠΉΠ»Π΅ создали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«mymoduleΒ»

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ имя модуля ΠΈ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅.

Имя Ρ„Π°ΠΉΠ»Π°: mycode.py

Код:

  ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

print(mymodule())  

Π’Ρ‹Π²ΠΎΠ΄:

  Traceback (послСдний послСдний Π²Ρ‹Π·ΠΎΠ²):  Π€Π°ΠΉΠ» "mycode.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *