PHPStan 1.0 āĻāϰ āϰāĻŋāϞāĻŋāϜ, PHP āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻŦāĻŋāĻļā§āϞ⧇āώāĻ•

āĻ›āϝāĻŧ āĻŦāĻ›āϰ āϧāϰ⧇ āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āĻĒāϰ, PHPStan 1.0 āύāĻžāĻŽāĻ• āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻ…ā§āϝāĻžāύāĻžāϞāĻžāχāϜāĻžāϰ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāϟāĻŋ āĻĒāĻŋāĻāχāϚāĻĒāĻŋ āϕ⧋āĻĄ āϚāĻžāϞāĻžāύ⧋ āĻŦāĻž āχāωāύāĻŋāϟ āĻŸā§‡āĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰ⧇āχ āϤāĻžāϰ āĻ¤ā§āϰ⧁āϟāĻŋ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤ āĻāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϕ⧋āĻĄ āĻĒāĻŋāĻāχāϚāĻĒāĻŋ-āϤ⧇ āϞ⧇āĻ–āĻž āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāĻŽāφāχāϟāĻŋ āϞāĻžāχāϏ⧇āĻ¨ā§āϏ⧇āϰ āĻ…āϧ⧀āύ⧇ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻ…ā§āϝāĻžāύāĻžāϞāĻžāχāϜāĻžāϰāϟāĻŋ ā§§ā§Ļ āĻ¸ā§āϤāϰ⧇āϰ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āϏ⧁āĻŦāĻŋāϧāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ¸ā§āϤāϰ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āĻ¸ā§āϤāϰ⧇āϰ āϏāĻ•ā§āώāĻŽāϤāĻž āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāϰāĻ“ āĻ•āĻ ā§‹āϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇:

  • āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āϝāĻžāϚāĻžāχ, āĻ…āϜāĻžāύāĻž āĻ•ā§āϞāĻžāϏ, āĻĢāĻžāĻ‚āĻļāύ āĻ“ āĻŽā§‡āĻĨāĻĄ ($this), āĻ…āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻāĻŦāĻ‚ āϭ⧁āϞ āϏāĻ‚āĻ–ā§āϝāĻ• āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĒāĻžāϏ āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āĻŦāĻŋāώāϝāĻŧāϗ⧁āϞ⧋ āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāĻŖāĨ¤
  • __call āĻāĻŦāĻ‚ __get āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻ…āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ, āĻ…āϜāĻžāύāĻž āĻŽā§āϝāĻžāϜāĻŋāĻ• āĻŽā§‡āĻĨāĻĄ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāϏ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāĻžāĨ¤
  • āϏāĻ•āϞ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ⧇ āĻ…āϜāĻžāύāĻž āĻŽā§‡āĻĨāĻĄ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇, āĻļ⧁āϧ⧁ $this āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āϰāĻž āĻ•āϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇āχ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āύāϝāĻŧāĨ¤ PHPDocs āĻšā§‡āĻ•āĻžāϰāĨ¤
  • āϰāĻŋāϟāĻžāĻ°ā§āύ āϟāĻžāχāĻĒ āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋāϤ⧇ āϟāĻžāχāĻĒ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻžāĨ¤
  • ‘āĻĄā§‡āĻĄâ€™ (āĻ•āĻ–āύ⧋ āĻ•āϞ āύāĻž āĻ•āϰāĻž) āϕ⧋āĻĄā§‡āϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāĻŖāĨ¤ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻŽāύ instanceof āĻ•āϞ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āϝāĻž āϏāĻ°ā§āĻŦāĻĻāĻž false āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇, āĻāĻŽāύ ‘else’ āĻŦā§āϞāĻ• āϝāĻž āĻ•āĻ–āύ⧋ āĻĢāĻžāϝāĻŧāĻžāϰ āĻšāϝāĻŧ āύāĻž, āĻāĻŦāĻ‚ return āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻĒāϰ⧇āϰ āϕ⧋āĻĄāĨ¤
  • āĻŽā§‡āĻĨāĻĄ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāύ⧇ āĻĒā§āϰ⧇āϰāĻŋāϤ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋āϰ āϧāϰāύ āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤
  • āĻĒā§āϰāĻ•āĻžāϰ⧇āϰ āϤāĻĨā§āϝāϏāĻš āĻŸā§€āĻ•āĻž āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāĻ•āĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āϏāϤāĻ°ā§āĻ•āϤāĻžāĨ¤
  • āĻĻ⧁āχ āĻŦāĻž āϤāϤ⧋āϧāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āϏāĻ‚āĻ—ā§āϰāĻš āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇ āĻāĻŽāύ āĻ…āĻŦ⧈āϧ āχāωāύāĻŋāϝāĻŧāύ āϟāĻžāχāĻĒ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϏāϤāĻ°ā§āĻ•āϤāĻžāĨ¤
  • āύāĻžāϞ āϟāĻžāχāĻĒ⧇āϰ āĻŽā§‡āĻĨāĻĄ āĻ•āϞ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āϏāϤāĻ°ā§āĻ•āϤāĻžāĨ¤
  • 'āĻŽāĻŋāĻļā§āϰ' āĻĒā§āϰāĻ•āĻžāϰ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤

    āĻļāύāĻžāĻ•ā§āϤāĻ•ā§ƒāϤ āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻšāĻŋāϤ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞ⧋āϰ āωāĻĻāĻžāĻšāϰāĻŖ:

    • instanceof, catch, typehints āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āĻŸā§‡ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦāĨ¤
    • āĻ•āϞ āĻ•āϰāĻž āĻŽā§‡āĻĨāĻĄ āĻ“ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋āϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦ āĻ“ āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻž, āϏ⧇āχāϏāĻžāĻĨ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤
    • āϕ⧋āύ⧋ āĻŽā§‡āĻĨāĻĄ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āϟāĻžāχāĻĒ⧇āϰ āĻĄā§‡āϟāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āĻ•āĻŋāύāĻž, āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰ⧇āĨ¤
    • āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāϗ⧁āϞ⧋āϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦ āĻ“ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύāϤāĻž, āĻāĻŦāĻ‚ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāϗ⧁āϞ⧋āϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ˜ā§‹āώāĻŋāϤ āĻ“ āĻĒā§āϰāĻ•ā§ƒāϤ āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒāϗ⧁āϞ⧋ āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāĨ¤
    • āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻŦā§āϞāϕ⧇ sprintf/printf āĻ•āϞ⧇ āϏāĻ āĻŋāĻ• āϏāĻ‚āĻ–ā§āϝāĻ• āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤
    • āĻŦā§āϰāĻžāĻžā§āϚāĻŋāĻ‚ āĻ…āĻĒāĻžāϰ⧇āϟāϰ āĻāĻŦāĻ‚ āϞ⧁āĻĒ āĻĻā§āĻŦāĻžāϰāĻž āĻ—āĻ āĻŋāϤ āĻŦā§āϞāĻ• āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧇ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦāĨ¤
    • āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϟāĻžāχāĻĒ āĻ•āĻžāĻ¸ā§āϟ (āϝ⧇āĻŽāύ "(string) 'foo'"), āĻ­āĻŋāĻ¨ā§āύ āϟāĻžāχāĻĒ⧇āϰ āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āĻ•āĻ ā§‹āϰ āĻšā§‡āĻ• ("===" āĻāĻŦāĻ‚ "!==") āĻāĻŦāĻ‚ āĻāĻŽāύ āĻ…āĻĒāĻžāϰ⧇āĻ¨ā§āĻĄ āϝāĻž āϏāĻ°ā§āĻŦāĻĻāĻž āĻĢāϞāϏ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤

    PHPStan 1.0-āĻāϰ āĻĒā§āϰāϧāĻžāύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϏāĻŽā§‚āĻš:

    • āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ āϞ⧇āϭ⧇āϞ "⧝" āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϝāĻž "āĻŽāĻŋāĻ•ā§āϏāĻĄ" āϟāĻžāχāĻĒ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇āĨ¤ āĻāχ āϟāĻžāχāĻĒāϟāĻŋ āĻāĻŽāύ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋āϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϝ⧇āϗ⧁āϞ⧋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϧāϰāύ⧇āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤ āϞ⧇āϭ⧇āϞ ⧝ "āĻŽāĻŋāĻ•ā§āϏāĻĄ"-āĻāϰ āĻ…āύāĻŋāϰāĻžāĻĒāĻĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇, āϝ⧇āĻŽāύ "āĻŽāĻŋāĻ•ā§āϏāĻĄ" āϟāĻžāχāĻĒ⧇āϰ āĻ­ā§āϝāĻžāϞ⧁ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āϟāĻžāχāĻĒ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž, "āĻŽāĻŋāĻ•ā§āϏāĻĄ" āϟāĻžāχāĻĒ⧇āϰ āĻŽā§‡āĻĨāĻĄ āĻ•āϞ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāϰ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž, āĻ•āĻžāϰāĻŖ āϏ⧇āϗ⧁āϞ⧋ āĻšāϝāĻŧāϤ⧋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύāĻžāĻ“ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
    • @phpstan-pure āĻāĻŦāĻ‚ @phpstan-impure āĻ…ā§āϝāĻžāύ⧋āĻŸā§‡āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āχ āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻ­āĻŋāĻ¨ā§āύ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻžāϚāĻžāχ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻžāĨ¤
    • @throws āĻ…ā§āϝāĻžāύ⧋āĻŸā§‡āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ try-catch-finally āĻ•āύāĻ¸ā§āĻŸā§āϰāĻžāĻ•ā§āĻŸā§‡ āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāύāĻžāϞāĻžāχāϏāĻŋāϏāĨ¤
    • āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ (āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ) āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ, āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻŦāĻ‚ āĻ§ā§āϰ⧁āĻŦāĻ• āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāĻžāĨ¤
    • array_map āĻāĻŦāĻ‚ usort-āĻāϰ āĻŽāϤ⧋ āĻ…ā§āϝāĻžāϰ⧇-āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϤ⧇ āĻŦ⧇āĻŽāĻžāύāĻžāύ āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻĒāĻžāϏ āĻ•āϰāĻžāĨ¤
    • āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āϟāĻžāχāĻĒāĻšāĻŋāĻ¨ā§āϟ āĻ…ā§āϝāĻžāύ⧋āĻŸā§‡āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϟāĻžāχāĻĒāϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ āĻ•āϰ⧁āύāĨ¤
    • āϟāĻžāχāĻĒ āĻĄā§‡āϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻāĻ–āύ PHPDocs-āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ, āĻĢāϞ⧇ āφāĻĒāύāĻŋ PHPDocs-āĻāϰ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āĻĨ⧇āϕ⧇ āϟāĻžāχāĻĒāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

    āωāĻ¤ā§āϏ: opennet.ru

  • DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster